jQuery:按文本查找元素

本文翻译自:jQuery: find element by text

Can anyone tell me if it's possible to find an element based on its content rather than by an id or class ? 谁能告诉我是否有可能根据其内容而不是ID来查找元素?

I am attempting to find elements that don't have distinct classes or id's. 我正在尝试查找没有不同类或ID的元素。 (Then I then need to find that element's parent.) (然后,我需要找到该元素的父对象。)


#1楼

参考:https://stackoom.com/question/uIL6/jQuery-按文本查找元素


#2楼

In jQuery documentation it says: 在jQuery文档中说:

The matching text can appear directly within the selected element, in any of that element's descendants, or a combination 匹配的文本可以直接出现在所选元素中,该元素的任何后代中或组合中

Therefore it is not enough that you use :contains() selector , you also need to check if the text you search for is the direct content of the element you are targeting for, something like that: 因此,仅使用:contains() 选择器还不够,还需要检查搜索的文本是否是您要定位的元素的直接内容 ,例如:

function findElementByText(text) {
    var jSpot = $("b:contains(" + text + ")")
                .filter(function() { return $(this).children().length === 0;})
                .parent();  // because you asked the parent of that element

    return jSpot;
}

#3楼

Rocket's answer doesn't work. 火箭的答案不起作用。

<div>hhhhhh
<div>This is a test</div>
<div>Another Div</div>
</div>

I simply modified his DEMO here and you can see the root DOM is selected. 我只是在这里修改了他的DEMO ,您可以看到已选择根DOM。

$('div:contains("test"):last').css('background-color', 'red');

add " :last " selector in the code to fix this. 在代码中添加“ :last ”选择器以解决此问题。


#4楼

Best way in my opinion. 我认为最好的方法。

$.fn.findByContentText = function (text) {
    return $(this).contents().filter(function () {
        return $(this).text().trim() == text.trim();
    });
};

#5楼

Fellas, I know this is old but hey I've this solution which I think works better than all. Fellas,我知道这很老了,但是我有这个解决方案,我认为它比所有方法都有效。 First and foremost overcomes the Case Sensitivity that the jquery :contains() is shipped with: 首要的是克服了jquery:contains()附带的区分大小写的问题:

var text = "text";

var search = $( "ul li label" ).filter( function ()
{
    return $( this ).text().toLowerCase().indexOf( text.toLowerCase() ) >= 0;
}).first(); // Returns the first element that matches the text. You can return the last one with .last()

Hope someone in the near future finds it helpful. 希望不久的将来有人对您有所帮助。


#6楼

The following jQuery selects div nodes that contain text but have no children, which are the leaf nodes of the DOM tree. 以下jQuery选择包含文本但没有子级的div节点,它们是DOM树的叶节点。

 $('div:contains("test"):not(:has(*))').css('background-color', 'red'); 
 <div>div1 <div>This is a test, nested in div1</div> <div>Nested in div1<div> </div> <div>div2 test <div>This is another test, nested in div2</div> <div>Nested in div2</div> </div> <div> div3 </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值