2017-07-29 68 views
0

我在我的jQuery上有点生疏(已经有几年了!)我不得不假设这已被问了100次,但我没有寻找正确的术语似乎。使用jQuery在任何子文本节点中查找匹配的文本?

我试图抓住一个对象的所有后代文本节点,然后,如果存在与文本字符串的匹配,请对该对象执行某些操作。这也是为什么我现在有:

$(".my-item").each(function(){ 
    var content = $(this).find('*').text(); 
    if (content.indexOf('mySearchString'>0)){ 
     //do something 
    } 
}) 

我似乎无法得到这个发现所有文本,但是。只是直接的后代。样本HTML:

<div class="my-item"> 
    this text is part of the var 'content' 
    <div> 
     this text is not 
    </div> 
</div> 

回答

0

你必须访问每个节点的textContent,你可以在过滤器中直接完成,并返回匹配,或者如果你想与他们直接合作

使用常规 each
$(".my-item").each(function(){ 
    var $children = $(this).children(); 

    $children.contents().each(function(i,node){ 
     if (node.nodeType === 3 && node.textContent.indexOf('mySearchString') !== -1) { 
      //do something 
     } 
    }); 
}); 

FIDDLE

+0

这会不会只是搜索'。我-item'的儿童的深度?这里递归的东西不是一个更好的解决方案吗? – Pineda

+0

有没有办法做到这一点'集体'?换句话说,我很好地抓住了所有的文本节点,并把它们一起砸成一个大字符串。我不需要分别解析每一个。 –

+0

@Pineda - 这就是'children()'所做的事情,它会得到直接的孩子吗? – adeneo