jQuery是一款非常受歡迎的JavaScript庫,提供了許多方便的方法來處理DOM元素,其中包括contains()方法。該方法可用于查找某個DOM元素中的文本是否包含指定字符串,而且也可以進行遞歸搜索。
$('p:contains("text")')
上述代碼將會在DOM中查找所有包含文本"test"的p元素。該方法非常方便,但是在某些情況下,我們需要使用遞歸搜索。
$.expr[':'].containsRecursive = $.expr.createPseudo(function (arg) {
return function (elem) {
function deepSearch(node) {
if (node.nodeType === 3 || node.nodeType === 1) {
if (node.nodeType === 3) {
if (node.nodeValue.indexOf(arg) >-1) {
return true;
}
} else if ($(node).children().length) {
return $(node).children().toArray().some(function (child) {
return deepSearch(child);
});
}
}
return false;
}
return deepSearch(elem);
};
});
$('div:containsRecursive("text")')
上述代碼是一個自定義containsRecursive方法,可以進行遞歸搜索。該方法會在DOM樹中深度查找元素中的子節點,直到找到包含指定文本的文本節點。這個方法是通過檢查元素的子元素來遞歸地查找匹配項的,而不是字符串的查找。
總而言之,contains()方法和自定義的containsRecursive方法兩種方式都可以進行字符串搜索,但是當需要進行遞歸搜索時,我們可以使用自定義的containsRecursive方法來替代contains()方法。
下一篇前端css3講解