2010-02-25 54 views
38

我有一個div列表,其中包含一個p標籤,分類爲index。這些p標籤的文本內容是從1到n(儘管可能不超過30-40)的數字。我有以下的選擇,這在初步測試工作得很好:基於EXACT文本內容選擇元素

var ad = $('.existing_ad .index:contains('+index+')').parents('.existing_ad'); 

哪裏index是我從p標籤檢索和.existing_ad數字指標是類的父div的。正如我所說,這工作得很好......直到我有更高的數字。例如,當索引是時,它選擇其中的索引例如其中的索引。 1,10-19,21,31等

我如何獲得ONLY索引n

+0

不知道這個區別可能會導致很大的問題+1 – interpolack 2015-07-08 18:05:34

回答

49

如何:

$('.existing_ad .index').filter(function() { 
    return $(this).text() == index; 
}).parents('.existing_ad'); 
+0

啊是的。我的好朋友'filter()'。我多久經常忘記你。 +1,謝謝! – Jason 2010-02-25 23:41:38

+1

不應該使用'==='而不是'==' – Medorator 2014-06-04 13:30:28

27

如果你經常使用它,你可以創建一個擴展

$.expr[":"].containsExact = function (obj, index, meta, stack) { 
    return (obj.textContent || obj.innerText || $(obj).text() || "") == meta[3]; 
}; 

$('div:containsExact('John')將匹配<div>John</div>但不<div>Johnny</div>

對於原來的問題,那將是

var ad = $(".existing_ad .index:containsExact('"+index+"')").parents('.existing_ad'); 
+6

恕我直言,這應該是公認的答案 – 2015-08-15 17:17:01

+1

是的,這對我來說工作得很好。請注意,我不需要在FTEs中使用以下引號:'$(「。table tr」)。find('td:first:containsExact(FTEs)')。text();' – DnfD 2015-09-09 13:29:47

+1

在實際應用中有時在'== meta [3];'之前的右括號之後添加'.trim()'以匹配精確文本之前和之後的空白。 – ianmcook 2015-09-16 15:33:58