简体   繁体   English

jQuery - 不是纯JavaScript

[英]jQuery-not in pure JavaScript

How can I write the following jQuery-not… 我怎么能写下面的jQuery - 不...

$(".hover").not(".selected");

… in pure JavaScript? ...在纯JavaScript中?

allItems = document.getElementsByTagName('*');
goodItems = [];
for(i=0;i<allItems.length;i++){
    if(
        allItems[i].className && 
        (' '+allItems[i].className.replace(/\s+/g, ' ')+' ').indexOf(' '+'hover'+' ') != -1 && 
        (' '+allItems[i].className.replace(/\s+/g, ' ')+' ').indexOf(' '+'selected'+' ') == -1
    )
        goodItems.push(allItems[i]);
}

If you need these kind of class selections often you should consider saving them as functions or even replicating some of the jQuery behaviour to be able to do stuff like $(".hover").not(".selected"); 如果你经常需要这些类选择,你应该考虑将它们保存为函数,或者甚至复制一些jQuery行为,以便能够执行像$(".hover").not(".selected");这样的东西$(".hover").not(".selected");

The following will work. 以下将有效。 It could be optimized by using a native browser implementation of getElementsByClassName() where present to filter the list to just elements with the "hover" class. 它可以通过使用getElementsByClassName()的本机浏览器实现进行优化,其中存在将列表过滤为仅具有“hover”类的元素。

function hasClass(el, cssClass) {
    return el.className && new RegExp("(^|\\s)" + cssClass + "(\\s|$)").test(el.className);
}

var matchingElements = [];
var allElements = document.getElementsByTagName("*");
for (var i = 0, len = allElements.length, el; i < len; ++i) {
    el = allElements[i];
    if (hasClass(el, "hover") && !hasClass(el, "selected")) {
        matchingElements.push(el);
    }
}

You can also use following function to get elements by class name. 您还可以使用以下函数按类名获取元素。

excludeClass is an optional parameter here, this function will still work if you only define the includeClass parameter. excludeClass是一个可选参数,如果只定义includeClass参数,此函数仍然有效。

function getElementsByClassName(includeClass, excludeClass) {
    var elements = []; var el = document.getElementsByTagName('*');
    var regexp1 = new RegExp("\\b" + includeClass + "\\b");
    var regexp2 = new RegExp("\\b" + (excludeClass ? excludeClass : "") + "\\b");
    for (var i = 0; i < el.length; i++) {
        if (regexp1.test(el[i].className) && !regexp2.test(el[i].className)) { elements.push(el[i]); }
    }
    return elements;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM