2013-03-14 42 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