我正在寫一個UserScript,它將從包含特定字符串的頁面中移除元素。本機JavaScript的jQuery相當於:包含()選擇器
如果我正確理解jQuery的contains()函數,它看起來就像是正確的工具。
不幸的是,由於我將運行UserScript的頁面不使用jQuery,因此我無法使用:contains()。你們中的任何一個可愛的人都知道本地的做法是什麼?
http://codepen.io/coulbourne/pen/olerh
我正在寫一個UserScript,它將從包含特定字符串的頁面中移除元素。本機JavaScript的jQuery相當於:包含()選擇器
如果我正確理解jQuery的contains()函數,它看起來就像是正確的工具。
不幸的是,由於我將運行UserScript的頁面不使用jQuery,因此我無法使用:contains()。你們中的任何一個可愛的人都知道本地的做法是什麼?
http://codepen.io/coulbourne/pen/olerh
好,jQuery的配備與操作比我都快要告訴你好多了一個DOM遍歷引擎,但它會做的伎倆。
var items = document.getElementsByTagName("*");
for (var i = 0; i < items.length; i++) {
if (items[i].innerHTML.indexOf("word") != -1) {
// Do your magic
}
}
把它包裝在一個函數中,如果你願意,但我強烈建議使用jQuery的實現。
如果你想實現contains
方法exaclty如jQuery不會,這是你需要具備什麼
function contains(elem, text) {
return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;
}
function getText(elem) {
var node,
ret = "",
i = 0,
nodeType = elem.nodeType;
if (!nodeType) {
// If no nodeType, this is expected to be an array
for (; (node = elem[i]); i++) {
// Do not traverse comment nodes
ret += getText(node);
}
} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
// Use textContent for elements
// innerText usage removed for consistency of new lines (see #11153)
if (typeof elem.textContent === "string") {
return elem.textContent;
} else {
// Traverse its children
for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
ret += getText(elem);
}
}
} else if (nodeType === 3 || nodeType === 4) {
return elem.nodeValue;
}
// Do not include comment or processing instruction nodes
return ret;
};
來源:Sizzle.js
這應該在現代瀏覽器做:
function contains(selector, text) {
var elements = document.querySelectorAll(selector);
return [].filter.call(elements, function(element){
return RegExp(text).test(element.textContent);
});
}
然後像這樣使用它:
contains('p', 'world'); // find "p" that contain "world"
contains('p', /^world/); // find "p" that start with "world"
contains('p', /world$/i); // find "p" that end with "world", case-insensitive
...
可能使用'Array.prototype.filter.call'而不是分配一個新的數組。 –
繼續並[用您的腳本添加jQuery](http://stackoverflow.com/a/12751531/331508)。不要浪費時間試圖重新創建它。 –
如果您準備放棄對某些瀏覽器的支持(我認爲只是IE7 - 編輯:也可能是IE8),您可以以非常類似於JQuery選擇器的方式使用本機「document.querySelectorAll」。 http://caniuse.com/#feat=queryselector – Katana314