如何编写jquery;是";javascript中的方法

如何编写jquery;是";javascript中的方法,javascript,jquery,Javascript,Jquery,我想知道如何只使用javascript编写jQuery is方法 您不能使用任何第三方库。只有浏览器提供的javascript 仅供参考,jQuery中的方法是: 对照选择器element检查当前匹配的元素集, 或jQuery对象,如果其中至少有一个元素 匹配给定的参数 如果需要对旧浏览器的支持,应该使用jQuery。这应该适用于IE9、Firefox和Chrome //returns true if element matches selector or if element is equal

我想知道如何只使用javascript编写jQuery is方法

您不能使用任何第三方库。只有浏览器提供的javascript

仅供参考,jQuery中的方法

对照选择器element检查当前匹配的元素集, 或jQuery对象,如果其中至少有一个元素 匹配给定的参数


如果需要对旧浏览器的支持,应该使用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
//如果元素与选择器匹配或元素等于作为选择器传递的节点,则返回true
功能是(元素、选择器){
var div=document.createElement(“div”);
var matchesSelector=div.webkitMatchesSelector | | div.mozMatchesSelector | | div.msMatchesSelector;
返回选择器的类型==“字符串”?匹配选择器。调用(elem,选择器):选择器===elem;
}
//如果数组/节点列表“是”选择器中的任何元素,则返回true
函数anyIs(元素、选择器){
var l=元素长度,i;
对于(i=0;i

如果有任何元素匹配,将返回
true

您不能。纯JavaScript无法访问DOM。document.getElementById不是纯JavaScript吗???@Woho87-如果您想要类似于jQuery方法的东西,那么jQuery源代码是可用的。您应该缩小您的需求范围,并指定您希望函数做什么。例如,您显然不想/不需要对jQuery对象进行检查。它对一个元素而不是一组元素进行操作。它只与选择器进行比较,这个问题要求它同时检查一个元素或jQuery对象。@Quentin好的,给我一分钟:P@Quentin是的,我不会写一个CSS选择器引擎作为我的答案,但我想我可以做这个列表thing@Quentin我认为,如果整个主题是“不用jQuery就可以完成”,那么支持jQuery对象的部分可以忽略概念为0.1+1。但它还没有完成。1.当有两个元素与选择器匹配时,您的方法将失败。要解决此问题,请使用
document.queryselectoral
并循环遍历它。2.好处:跨框架的兼容性:使用
元素所有者文档
而不是
文档
。3.一个完整的解决方案:拆分选择器,由空格分隔。然后,多次使用QSA来获得解决方案(注意:拆分很简单,您实际上应该将其标记化以处理例如
[value=“a space”]
)。@RobW关于
elem.ownerDocument的好消息。正如我在回答中所说的,我只是想说明它是一种针对单元素选择器的快速简便的解决方案。Esailija已经展示了一个完整解决方案的好代码。@FlorianMargaine是的,但通过一些努力,您可以压缩IE8:P@FlorianMargaine我想在答案中加上循环。否则,它只对唯一选择器有用。只有ID选择器始终是唯一的。在这种情况下,您的代码可以简化为
return elem.id===selectore.slice(1)ID不是唯一的单元素选择器。
function is( elem, selector ) {
    var sel = elem.ownerDocument.querySelectorAll( selector );
    return [].some.call( sel, function( el ) {
        return elem === el;
    } );
}