Jquery找到('*')加倍A标签

时间:2016-01-06 12:31:45

标签: javascript jquery

我对找到A标签的元素上的Jquery find('*')感到有些困惑。我的示例代码如下:

<ul>
  <li id="cell1" data-link="Page 1">
    <p>Example text</p>
  </li>
  <li id="cell2" data-link="Page 2">
    <h2 class="story-body__crosshead">More from our Diet Debate series:</h2>
    <p><a href="http://www.bbc.co.uk/news/health-35150598" class="story-body__link">Read: Is breakfast a waste of time?</a></p>
    <p><a href="http://www.bbc.co.uk/news/health-35215686" class="story-body__link">Watch: How healthy is your breakfast?</a></p>
  </li>
  <li id="cell3" data-link="Page 3">Cell 3</li>
  <li id="cell4" data-link="Page 4">Cell 4</li>
</ul>

Js代码

$(elem).find('*').each(function(){
   if ($(this).html().indexOf('breakfast') > 0){
       alert($(this).html());
    }
});

警报但每个A标签警告两次。它显示内部文本和外部文本(完整的html)。但是我依赖于移动元素并替换它们,因此这段代码最终在同一页面上输出两次链接。我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:3)

您的代码与file://affiliate.flipkart.com/widget/displayWidget?wrid=...代码 a代码的任何祖先相匹配,因为a匹配*中的所有DOM元素(这是你的LIs)。在您的示例中,它将匹配elem代码以及p代码。

使用仅定位a代码的范围选择器:

e.g。

a

使用// Elem here is the li about $("a", elem).each(function(){ if ($(this).html().indexOf('breakfast') >= 0){ alert($(this).html()); } }); 更简单:

:contains

注意:您的代码仅允许包含$("a:contains(breakfast)", elem).each(function(){ alert($(this).html()); }); 但不包含breakfast的文本(例如,如果它位于开头并大写),因为该检查区分大小写。