<div id="page-content">
  <ul>
   <li>Text</li>
   <li>Text 2 </li>
  </ul
  <div class="heading">
    <h2>Heading</h2>
  </div>
</div>

我以上面的HTML代码为例。我想过滤每个元素,并且只向带有文本的元素添加一个类。我在下面得到了一些jQuery:
$(document).ready(function(){
  $('#page-content').find('*').each(function(){
    if ($(this).text().trim().length){
      $(this).addClass('yay');
    }
  });
});

代码在page content元素中查找每个项,并检查它是否有文本,然后添加类“yay”。这是可行的,但是如果父元素的子元素中有文本,则它将给父元素类。它将给<ul>这个类,因为<li>有文本。
我正在使用的代码是否有问题,或者我需要使用完全不同的脚本来只将类应用于带有文本的元素?
注意,HTML是生成的,因此我可能会得到一个<ol>而不是<ul>,或者一个包含在页面内容中的<a>标记。

最佳答案

您可以修改代码以检查元素是否有子元素,并且仅当这是文本节点时才添加类。但如果HTML格式不正确,这可能会导致问题。

$(document).ready(function() {
      $('#page-content').find('*').each(function() {
          if ($(this).children().length == 0 && $(this).text().trim().length) {
              $(this).addClass('yay');
          }
      });
  });

关于javascript - 筛选元素,仅选择带有文本的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37738511/

10-12 02:19