2012-07-01 52 views
-1

我不知道如何寫jQuery方法只使用javascript?如何在javascript中編寫jquery「is」方法

您不能使用任何第三方庫。只有從瀏覽器提供的JavaScript。

FYI方法is jQuery中:

檢查當前匹配的元素集合中對一個選擇器,元件, 或jQuery對象,並且如果這些元素 給定的參數匹配中的至少一個返回true。

+1

你不能。 * Pure * JavaScript無法訪問DOM。 – Quentin

+0

是不是document.getElementById純JavaScript? – einstein

+0

不,getElementById是DOM級別1. – Quentin

回答

5

如果您需要舊版瀏覽器支持,則應該使用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 
+0

這對一個元素而不是一組元素進行操作。 – Quentin

+0

只比較選擇器,這個問題要求它也檢查元素或jQuery對象。 – Quentin

+0

@Quentin ok給我一分鐘:P – Esailija

2
function is(elem, selector) { 
    var sel = elem.ownerDocument.querySelectorAll(selector); 
    return [].some.call(sel, function(el) { 
     return elem === el; 
    }); 
} 

將返回true如果任何元素匹配。

+0

它只適用於'#id''選擇器 – Esailija

+0

+1這個概念。但尚未完成。 1.當有兩個元素與選擇器匹配時,您的方法**失敗**。爲了解決這個問題,使用'document.querySelectorAll'並循環。 2.獎勵:跨幀兼容性:使用'elem.ownerDocument'而不是'document'。 3.完整的解決方案:拆分選擇器,用空格分隔。然後,多次使用QSA來獲得解決方案(注意:分割很簡單,您應該實際標記它以處理例如'[value =「空格」])。 –

+0

@RobW關於'elem.ownerDocument'的好東西。正如答案中所說,我只是想表明它是單元素選擇器的快速簡便的解決方案。 Esailija已經爲完整的解決方案展示了一個很好的代碼。 –

相關問題