Text jQuery:检查另一个元素中是否存在文本

Text jQuery:检查另一个元素中是否存在文本,text,jquery,Text,Jquery,使用jQuery,我想检查我正在单击的链接的文本是否存在于页面上的另一个元素中。另一个元素中的文本是动态添加的,最初不显示在页面上 到目前为止,我有: $("#results a").live("click", function(event){ var seed = $(this).text(); if ($("#seeds:has(" + seed + ")")){ alert("already have it"); } else {

使用jQuery,我想检查我正在单击的链接的文本是否存在于页面上的另一个元素中。另一个元素中的文本是动态添加的,最初不显示在页面上

到目前为止,我有:

$("#results a").live("click", function(event){ var seed = $(this).text(); if ($("#seeds:has(" + seed + ")")){ alert("already have it"); } else { // other code } }); $(“#结果a”).live(“单击”),功能(事件){ var seed=$(this.text(); if($(“#seed:has(“+seed+”)){ 警惕(“已经有了”); } 否则{ //其他代码 } }); 但出于某种原因,即使
#seeds
中没有
#results a
链接的文本,我也会收到“已拥有”警报。我做错了什么


更新:按照建议,使用
:contains
而不是
:has
,在大多数情况下都有效……除非
#seeds
包含一个字符串,该字符串是
#results
锚定中文本的超集


例如,如果
#seeds
包含文本
Americana
,并且
#results
主播的文本是
America
,我仍然会收到“已经拥有”警报。我希望警报仅在完全匹配的情况下显示。这可能吗?

您可以使用
:contains()
而不是
:has()

这将检查
#seeds
元素是否包含单击的链接所包含的文本

如果要查找
#seeds
元素的后代元素,请执行以下操作:

$("#results a").live("click", function(event){
    var seed = $(this).text();
    if ($("#seeds").find(":contains(" + seed + ")").length){
        alert("already have it");
    }
    else {
        // other code
    }
});
下面是一个演示:

请注意,我正在检查返回的元素集的
length
,如果没有元素,则返回零,
if
语句将解析为false,如果有元素,则将解析为truthily

还请注意,
:contains()
区分大小写:

旁注 如果您使用的是jQuery 1.4.2或更高版本,则可以使用
.delegate()
而不是
.live()
.delegate()
的主要优点是可以选择根元素。因此,例如,如果DOM中始终存在
#results
,则可以将其用作根元素,而不是
文档
元素(这就是
.live()
的作用):

如果动态地将
#results
添加到DOM中,则可以找到它的父元素并将其用作根元素(…只要它在DOM中保持不变)

更新 如果只想匹配链接的精确文本,则可以遍历
#results
元素的子元素并检查每个元素的文本:

$("#results a").live("click", function(event){
    var seed  = $(this).text(),
        found = false;
    $.each($('#seeds').find('*'), function () {
        if ($(this).text() == seed) {
            found = true;
        }
    });
    if (found){
        alert("already have it");
    }
    else {
        alert('that\'s new');
    }
    return false;
});​
下面是一个演示:

您还可以使用RegExp来匹配该值:

$("#results a").live("click", function(event){
    var regexp = new RegExp("^(" + $(this).text() + ")$", "i"),
        found  = false;
    $.each($('#seeds').find('*'), function () {
        if ($(this).text().search(regexp) > -1) {
            found = true;
        }
    });
    if (found){
        alert("already have it");
    }
    else {
        alert('that\'s new');
    }
    return false;
});​
下面是一个演示:

这里的重要部分是创建RegExp:
var RegExp=new RegExp(“^(“+$(this).text()+”)$”,“i”)
。请注意
i
标志,它将RegExp设置为搜索不区分大小写。另外,
^
匹配字符串的开头,而
$
匹配字符串的结尾,因此可以查看当前选中的文本是否与搜索词完全相同(只是不区分大小写)。

使用
:contains()
而不是
:has()
并检查length属性,因为jQuery总是提供一个对象

:has(selector)
将选择器作为输入,并查找与选择器匹配的元素,其中as
:contains(text)
将文本用于检查元素内的文本内容并选择它们

$("#results a").live("click", function(event){
    var seed = $(this).text();
    if ($("#seeds:contains(" + seed + ")").length){
        alert("already have it");
    }
    else {
        // other code
    }
});

谢谢但这并不是在所有情况下都适用于我——请参阅我更新的问题。
$("#results a").live("click", function(event){
    var regexp = new RegExp("^(" + $(this).text() + ")$", "i"),
        found  = false;
    $.each($('#seeds').find('*'), function () {
        if ($(this).text().search(regexp) > -1) {
            found = true;
        }
    });
    if (found){
        alert("already have it");
    }
    else {
        alert('that\'s new');
    }
    return false;
});​
$("#results a").live("click", function(event){
    var seed = $(this).text();
    if ($("#seeds:contains(" + seed + ")").length){
        alert("already have it");
    }
    else {
        // other code
    }
});