2013-03-14 31 views
1

此代码:跨度:含有()发现许多数字

if($('span:contains("'+user_choice+'")').length == 0) 

使用contain选择找到<span>,其中包含用户输入。所述用户输入user_choice是一个数,像12331

但代码未能找到特定<span>,由于例如用户输入user_choice = 1将找到12131包含的所有数字1。我只需要找到具体的<span>,正好是1

contain选择器是否出于此目的而错误,我该如何纠正它使其工作?

回答

3

是的,contains选择是错的你的目的。顾名思义,它将任何包含指定文本的元素作为子字符串进行匹配,而不仅仅是那些完全匹配的元素。

你可以尝试使用.filter()

var matchingElements = $('span').filter(function(index) { 
    return $(this).text() === user_choice; 
}); 
if(matchingElements.length === 0) { 
    ... 
} 
+0

对于'==='+1,并将OP引入一个更酷的工作 – 2013-03-14 10:32:49

+0

所有这些年来使用jQuery,我不敢相信我从来没有遇到过.filter()(尽管从1.0版开始)。这是一个比我提供的更好的解决方案! – 2013-03-14 10:38:00

1

这样的事情呢?

$('span').each(function(){ 
    if ($(this).html() == user_choice){ 
    return true; 
    } 
}); 
+0

它会返回像 == 1,更好的使用http://api.jquery.com/html/中的text()方法 – 2013-03-14 10:30:14

+0

:“获取匹配元素集合中第一个元素的HTML内容”。所以html()只会返回内容而不是标签本身 – 2013-03-14 10:32:51

+0

是。我的错。 outerHTML将给出标签。 – 2013-03-14 10:34:37

3

您可以使用filter方法。

var len = $('span').filter(function(){ 
    return $(this).text() == user_choice; 
}).length; 
1

尝试用每个函数,它会比较 “跨度” 的所有标签

$('span').each(function(){ 
    if ($(this).text() == "my_choosen_var"){ 
    return true; 
    } 
}); 
+0

@Ravi不知道你在说什么,'.html()'方法返回'innerHTML',所以如果元素的'outerHTML'为'',那么它就是'1'。 – 2013-03-14 10:32:12

+0

然而,从传递给'.each()'的函数返回'true'并没有做任何事情来改变匹配元素的集合。 – 2013-03-14 10:32:57

+0

@AnthonyGrist我的坏。律迷惑。 – 2013-03-14 10:33:58