我想根據html內容選擇列表中的元素。我希望能做到像$('li[html="something"]')
,但當然HTML不是一個屬性。是否有一個等效的基於集合的操作?使用html()作爲jQuery的屬性
我當然可以使用$.each()
迭代列表中的所有元素,但在我看來它會慢很多。
我想根據html內容選擇列表中的元素。我希望能做到像$('li[html="something"]')
,但當然HTML不是一個屬性。是否有一個等效的基於集合的操作?使用html()作爲jQuery的屬性
我當然可以使用$.each()
迭代列表中的所有元素,但在我看來它會慢很多。
你可以嘗試:包括()選擇
http://api.jquery.com/contains-selector/
$("li:contains('something')")
精確匹配(從上面的鏈接):
$.expr[":"].contains = function(obj, index, meta, stack){
return $.trim($(obj).html()) == meta[3];
}
用法:
$("li:contains('john')")
這隻會匹配<li>John</li>
,而不是<li>A. John</li>
,既不<li>John 6</li>
...只是<li>John</li>
!
查看我更新後的確切匹配擴展名的答案 – 2010-10-05 11:20:25
感謝您指出我在正確的方向,但正確的解決方案需要建立在,使用$ .extend。以下是我想出了:
$.extend($.expr[':'], {
'hasHtml': function(elem, i, attr) {
return ($(elem).html() == attr[3]);
}
});
這不適用於IE 6,因爲$(elem).html()返回「john」。你需要在我的答案中調用trim()函數,以便在所有情況下都能正常工作。不幸的是,很多人仍然使用IE 6 – 2010-10-05 11:41:11
似乎在IE測試工作良好.... – Shagglez 2010-10-05 11:55:10
不要指望。它與IE6獨立運行它不一樣。不幸的是,我在一家銀行工作。這本身並沒有錯,但大多數銀行的大多數工作站仍然是IE 6,他們的升級週期非常慢。如果沒有裝飾,它不適用於我們的任何機器。它不會有任何傷害,祝你好運。 – 2010-10-05 11:59:17
哈,扣.... :) – 2010-10-05 10:59:43