【问题标题】:How to hide elements using css only without id or class如何仅使用 css 隐藏没有 id 或 class 的元素
【发布时间】:2017-12-23 06:36:02
【问题描述】:

我怎样才能使用 CSS 隐藏这个标签中的“钢琴课”字样,但没有 ID 或类,但只使用选择器?

<div class="alert alert-success dynamic-alert ">
    <ul>
        <li>
            (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a> Piano Lesson
        </li>
    </ul>
</div>

我无法更改 html!

【问题讨论】:

  • 您无法使用 CSS 选择文本节点。
  • 你应该在&lt;span&gt;中换行,然后你就可以隐藏它了
  • 这里你需要把这个文本“钢琴课”放在任何html属性中。
  • 你能修改你的 HTML 吗?

标签: css


【解决方案1】:

将其包装在span 中并使用内部样式。

注意:内部样式优于内联样式。

.alert li a + span {
  display:none;
}

.alert li a + span {
  display:none;
}
<div class="alert alert-success dynamic-alert ">
    <ul>
        <li>
            (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a> <span>Piano Lesson<span>
        </li>
    </ul>
</div>

你说:我怎样才能将内容“(取消)”移动到“钢琴课”的位置并替换它?

使用 jquery:

$(document).ready(function(){
  $('button').click(function(){
    var c = $($('li a')[0].previousSibling).text();
    $($('li a')[0].previousSibling).wrap('<span style="display:none"></style>');
    $($('li a')[0].nextSibling).wrap('<span style="display:none"></style>');
    $('li a').after('<span>' + c + '</span>')
  }) 
})

$(document).ready(function(){
  $('button').click(function(){
    var c = $($('li a')[0].previousSibling).text();
    $($('li a')[0].previousSibling).wrap('<span style="display:none"></style>');
    $($('li a')[0].nextSibling).wrap('<span style="display:none"></style>');
    $('li a').after('<span>' + c + '</span>')
  }) 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="alert alert-success dynamic-alert ">
    <ul>
        <li>
            (Canceled)<a href="http://www.google.ch">July 18, 2017 13:30</a>Piano Lesson
        </li>
    </ul>
    <button>Go</button>
</div> 

【讨论】:

  • 这有帮助!我怎么能将内容“(取消)”移动到“钢琴课”的位置并替换它?谢谢!
【解决方案2】:

遵循此代码。

HTML

<ul>
        <li>
            (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a><span> Piano Lesson</span>
        </li>
    </ul>

css

ul li span{display:none}

或者其他方式:

HTML

<ul>
        <li>
            (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a><span class="span-style"> Piano Lesson</span>
        </li>
    </ul>

css

ul li .span-style{display:none} or .span-style{display:none}

【讨论】:

    【解决方案3】:

    <div class="alert alert-success dynamic-alert ">
        <ul>
            <li>
                (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a> <span style="display:none;">Piano Lesson</span>
            </li>
        </ul>
    </div>

    只需在标签内添加Piano Lesson,并使用style="display:none;" 将其隐藏。

    编辑:您也可以使用它(不需要额外的 ID 和等级)

    .alert ul li span{
    display:none;
    }
    <div class="alert alert-success dynamic-alert ">
        <ul>
            <li>
                (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a> <span>Piano Lesson</span>
            </li>
        </ul>
    </div>

    【讨论】:

    • 我无法修改标签..我只能在样式表中更改 CSS..
    • 编辑了我的答案,您至少可以在钢琴课周围添加 span 标签对吗?如果您还需要其他东西,请告诉我
    【解决方案4】:

    如果你不能编辑 html...你仍然可以得到想要的效果,但是用一种 hacky 的方式。

    这还没有跨浏览器支持...我的意思是它不能在 IE 或 Edge 上运行。我在 Chrome 59 和 FF 54 中对其进行了测试,一切都很好。

    话虽如此,Can I use 表示这将适用于至少 89% 的用户。

    .alert li {
      -webkit-mask-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 1)12.8em, /** <---- manually edit this value to determine the cutoff point **/
      rgba(0, 0, 0, 0)0, rgba(0, 0, 0, 0));
    }
    <div class="alert alert-success dynamic-alert ">
      <ul>
        <li>
          (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a> Piano Lesson
        </li>
      </ul>
    </div>

    【讨论】:

    • 有趣,但手动编辑可能会很烦人
    • @ovokuro 我完全同意
    【解决方案5】:

    正如其他人所说,更改 HTML 是最佳选择。

    如果你不能这样做,另一种方法:

    .alert ul li {
     font-size: 0;
    }
    
    .alert ul li a {
     font-size: 16px;
    }
    
    .alert ul li:before {
      content: 'Canceled';
      display: inline-block;
      font-size: 16px;
      margin-right: 5px;
    }
    <div class="alert alert-success dynamic-alert ">
        <ul>
            <li>
                (Canceled) <a href="http://www.google.ch">July 18, 2017 13:30</a> Piano Lesson
            </li>
        </ul>
    </div>

    【讨论】:

      【解决方案6】:
      $('ul li').each(function(){
          var content=$(this).html();
          var check=content.search('Piano Lesson');
          if(check!='-1'){
              content=content.replace('Piano Lesson','');
          }
          $(this).html(content);
      })
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2023-03-10
      • 2016-03-22
      • 1970-01-01
      • 2015-07-15
      相关资源
      最近更新 更多