我不知道如何寫jQuery方法只使用javascript?如何在javascript中編寫jquery「is」方法
您不能使用任何第三方庫。只有從瀏覽器提供的JavaScript。
FYI方法is
jQuery中:
檢查當前匹配的元素集合中對一個選擇器,元件, 或jQuery對象,並且如果這些元素 給定的參數匹配中的至少一個返回true。
我不知道如何寫jQuery方法只使用javascript?如何在javascript中編寫jquery「is」方法
您不能使用任何第三方庫。只有從瀏覽器提供的JavaScript。
FYI方法is
jQuery中:
檢查當前匹配的元素集合中對一個選擇器,元件, 或jQuery對象,並且如果這些元素 給定的參數匹配中的至少一個返回true。
如果您需要舊版瀏覽器支持,則應該使用jQuery。這應該適用於IE9,Firefox和Chrome。
//returns true if element matches selector or if element is equal to the node passed as selector
function is(elem, selector) {
var div = document.createElement("div");
var matchesSelector = div.webkitMatchesSelector || div.mozMatchesSelector || div.msMatchesSelector;
return typeof selector == "string" ? matchesSelector.call(elem, selector) : selector === elem;
}
//returns true if any elements in the array/nodelist "is" selector
function anyIs(elems, selector) {
var l = elems.length, i;
for(i = 0; i < l; ++i) {
if(is(elems[i], selector)) {
return true;
}
}
return false;
}
is(document.createElement("div"), "div")
//true
is(document.createElement("div"), "li")
//false
anyIs(document.getElementsByTagName("div"), document.getElementsByTagName("div")[3])
//true
anyIs(document.getElementsByTagName("div"), "div")
//true
function is(elem, selector) {
var sel = elem.ownerDocument.querySelectorAll(selector);
return [].some.call(sel, function(el) {
return elem === el;
});
}
將返回true
如果任何元素匹配。
它只適用於'#id''選擇器 – Esailija
+1這個概念。但尚未完成。 1.當有兩個元素與選擇器匹配時,您的方法**失敗**。爲了解決這個問題,使用'document.querySelectorAll'並循環。 2.獎勵:跨幀兼容性:使用'elem.ownerDocument'而不是'document'。 3.完整的解決方案:拆分選擇器,用空格分隔。然後,多次使用QSA來獲得解決方案(注意:分割很簡單,您應該實際標記它以處理例如'[value =「空格」])。 –
@RobW關於'elem.ownerDocument'的好東西。正如答案中所說,我只是想表明它是單元素選擇器的快速簡便的解決方案。 Esailija已經爲完整的解決方案展示了一個很好的代碼。 –
你不能。 * Pure * JavaScript無法訪問DOM。 – Quentin
是不是document.getElementById純JavaScript? – einstein
不,getElementById是DOM級別1. – Quentin