【问题标题】:Select all the <p> elements that contain only a <br> element inside选择内部仅包含 <br> 元素的所有 <p> 元素
【发布时间】:2018-10-18 13:08:19
【问题描述】:

我有以下 HTML 代码,但无法控制:

<p>this is visible</p>

<p>&nbsp;</p>

<p></p>

<p>
<br>
</p>

我需要隐藏所有没有文本的 p 元素。 到目前为止,使用此脚本我删除了除此之外的所有内容:

<p>
</br>
</p>

这是我正在使用的脚本:

   $("p").filter( function() {

      var html = $(this).html();

      if(html == '' || html == '&nbsp;' || html == '<br>')
          return true;

   }).addClass('emptyP');

【问题讨论】:

  • 好吧,&lt;/br&gt; 会被浏览器忽略,我敢打赌,因为它在 HTML 中毫无意义。您是否记录了脚本在元素中发现的内容?
  • 你可以尝试 $("p>br") 并且对于这些元素中的每一个你都可以调用 parent 来获取 p 元素
  • I need to hide all the p elements with no text inside 你能用.text() 吗?它将大大简化您的逻辑,因为它不会返回 html 实体
  • @Pointy:实际上,尽管是语法错误,</br> is functionally equivalent to <br> in all browsers。一个错字,偶然,有效。
  • @BoltClock 真的吗? 关闭标签?我知道&lt;br/&gt; 有效,但将&lt;/br&gt; 解释为&lt;br&gt; 似乎对任何人都没有任何好处。但是我不应该感到惊讶;我个人的理论是,这些行为中有很大一部分是由古老的 IE 版本引入的黑客行为,以使 1999 年的新手 Web 开发人员认为 IE 比 Netscape 运行得更好:)

标签: javascript jquery jquery-selectors


【解决方案1】:

如果你想隐藏所有p's不带文字,可以使用jQuery.text(),如下所示。

$("p").filter( function() {
  return !$(this).text().trim();
}).addClass('emptyP');
.emptyP {display:none}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>this is visible</p>
<p>&nbsp;</p>
<p></p>
<p><br/></p>

【讨论】:

  • 感谢您的回答 Nikhil 它有效。我不知道为什么我没有想到这一点。我会在 2 分钟内接受。
  • @FlorinSimion - 不用担心。可以发生。很高兴帮助你:)
猜你喜欢
  • 2016-08-01
  • 2012-05-18
  • 1970-01-01
  • 2013-11-15
  • 2016-12-12
  • 2011-08-14
  • 1970-01-01
  • 2018-04-19
  • 2013-05-01
相关资源
最近更新 更多