Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
纯JavaScript替代jQuery';s.not()_Javascript_Jquery - Fatal编程技术网

纯JavaScript替代jQuery';s.not()

纯JavaScript替代jQuery';s.not(),javascript,jquery,Javascript,Jquery,除了jQuery中的.not(),JS的替代方案是什么?我有$(“.form:input”)。不是,但需要将其转移到纯JS。有没有能帮我的导游 var input = $(".form :input").not('button, [type="button"], [type="submit"]').on({ input: return }); 我希望在JS中做到这一点,现代浏览器在queryselectoral()中支持NOT子句。: document.querySelectorAll(“.

除了jQuery中的
.not()
,JS的替代方案是什么?我有
$(“.form:input”)。不是
,但需要将其转移到纯JS。有没有能帮我的导游

 var input = $(".form :input").not('button, [type="button"], [type="submit"]').on({
input: return
});

我希望在JS中做到这一点,现代浏览器在
queryselectoral()中支持NOT子句。

document.querySelectorAll(“.form:input:not(…)”;
示例():

这应该是彩色的!
这应该是彩色的!
这个不能上色!
这应该是彩色的!
这应该是彩色的!
var matchedElements=document.queryselectoral(“div:not(#this not)”);

对于(var i=0;i您还可以使用
.filter()
排除数组中的项。您可以这样使用它(来自MDN的示例):

所有现代浏览器和IE9+都支持它。有关更多信息,请参阅

不幸的是,
.filter()
只能在数组上工作,因此我们必须进行一些额外的操作来过滤
节点列表

HTML:


参见下面的工作示例。

在普通JS中的等价物如下所示

var forms = document.querySelectorAll('.form'),
    inputs = [];

for (var i = forms.length; i--;) {
    var els = forms[i].querySelectorAll('input, textarea, select');

    for (var j = els.length; j--;) {
        if (els[j].type != 'button' && els[j].type != 'submit') {
            inputs.push(els[j]);
            els[j].addEventListener('input', cback, false);
        }
    }
}

function cback(event) {
    var b = [];

    for (var i = inputs.length; i--;) {
        if (!inputs[i].value.length) b.push(inputs[i]);
    }

    var l1 = b.length;
    var l2 = inputs.length;
    var top = document.querySelectorAll('.top');

    for (var j = top.length; j--;) {
        top[j].style.width = 100 - (l1 / l2) * 100 + "%";
    }
}

什么?我正在寻找替代方案……@Mikeyou应该告诉我们什么。不是()函数是用于JQuery的。可能有人不知道JQuery,但他知道JavaScript,因此通过您的解释,他可以理解并回答JS中的问题。或者只是将您想要的内容提供给一个公共类,而不必担心这些内容。查看我的编辑@Mike@Ali是删除所选元素,而不是否定运算符。我得到
uncaughtrefereNCERROR:querySelectorAll在尝试使用它时未定义fort.min.js:1(匿名函数)
…然后使用
document.querySelectorAll(“”;
),然后我得到
未捕获的语法错误:未能对“document”:“执行”querySelectorAll。“form:input”不是有效的选择器。
@derek_duncanit只是“input”,而不是“:input”当然,QSA版本不会将该选择器映射到文本区域和选择与按钮,但这是分隔符。我喜欢“[name]”为了命中表单元素…我再次得到
未捕获类型错误:未定义不是一个函数
@dandavisimight还包括如何获得
数组
jQuery
集合和
节点列表都不是
数组
并且不会继承它们的方法。MDN提供了一些解决方法:
<ul>
    <li>1</li>
    <li>2</li>
    <li class="not-me">3</li>
    <li>4</li>
    <li>5</li>
</ul>
var filter = Array.prototype.filter;

var excludeByClassName = function(className) {
    return function (element) {
        return element.className != className;
    };
};

var LIs = document.getElementsByTagName('li');
// [li, li, li.not-me, li, li]

var filteredLIs = filter.call(LIs, excludeByClassName('not-me'));
// [li, li, li, li]
var forms = document.querySelectorAll('.form'),
    inputs = [];

for (var i = forms.length; i--;) {
    var els = forms[i].querySelectorAll('input, textarea, select');

    for (var j = els.length; j--;) {
        if (els[j].type != 'button' && els[j].type != 'submit') {
            inputs.push(els[j]);
            els[j].addEventListener('input', cback, false);
        }
    }
}

function cback(event) {
    var b = [];

    for (var i = inputs.length; i--;) {
        if (!inputs[i].value.length) b.push(inputs[i]);
    }

    var l1 = b.length;
    var l2 = inputs.length;
    var top = document.querySelectorAll('.top');

    for (var j = top.length; j--;) {
        top[j].style.width = 100 - (l1 / l2) * 100 + "%";
    }
}