仅选择直接包含文本的元素 [英] Select only elements who directly contain text

查看:65
本文介绍了仅选择直接包含文本的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有这样的东西:

<div class="main">
  <div class="useless">
    text I don't want.    
  </div>
  <div class="useless">
    text I don't want.    
  </div>
  <div class="narrow">
    text I'm searching for
  </div>
  <div class="useless">
    text I don't want.    
  </div>
  <div class="useless">
    text I don't want.    
  </div>
</div>

使用jQuery可爱的 :contains选择器,我可以搜索关键字,但是它将同时返回父母和孩子.

Using jQuery's lovely :contains selector, I can search for a keyword, but it will return both the parent and the child.

我希望它只返回直接包含我要搜索的单词的元素.

I'd like it to only return elements who directly contain the word for which I'm searching.

Stackoverflow有用地建议此链接作为一个链接以前的尝试,但是由于它正在爬网所有dom节点并且需要大量不清楚的代码,因此似乎非常笨拙.

Stackoverflow usefully suggested this link as a previous attempt, but it seems extremely clunky since it's crawling all dom nodes and requires a lot of unclear code.

推荐答案

此脚本将查找包含特定文本的所有节点.它还将允许您对文本(正则表达式等)进行任何字符串测试.

This script will find all nodes that contain a specific text. It will also allow you to do any string tests on the text (regex etc).

function getNodesThatContain(text) {
    var textNodes = $(document).find(":not(iframe, script, style)")
      .contents().filter( 
          function() {
           return this.nodeType == 3 
             && this.textContent.indexOf(text) > -1;
    });
    return textNodes.parent();
};

console.log(getNodesThatContain("test"));

以下是用于测试的小提琴: http://jsfiddle.net/85qEh/4/

Here is a fiddle for testing: http://jsfiddle.net/85qEh/4/

PS-要提高速度,请使用其他顶级选择器.例如,如果您只需要在#container内部,则可以var textNodes = $('#container')...

PS - For increased speed use a different top level selector. For example if you only need inside #container then you would var textNodes = $('#container')...

这篇关于仅选择直接包含文本的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆