在 zepto 的源代码中,我发现在 zepto.matches 函数中,有一个后备执行,
zepto.matches = 函数(元素,选择器){ if (!element || element.nodeType !== 1) 返回 false var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.matchesSelector 如果(matchesSelector)返回matchesSelector.call(元素,选择器) // 回退到执行选择器: var match, parent = element.parentNode, temp = !parent if (temp) (parent = tempParent).appendChild(element) 匹配=〜zepto.qsa(父,选择器).indexOf(元素) temp && tempParent.removeChild(元素) 返回匹配 }
尽管使用了正常的 matchSelector 方式,但我对后备非常好奇,为什么要在前面添加~ :
~zepto.qsa(parent, selector).indexOf(element)
document.getElementById("test"); $.zepto.matches(a,"#test") // -1
它返回 -1 ,是对的还是我错过了什么?