在JavaScript中,有一个类似于jQuery的.not()
的方法吗?我有一个$(".form :input").not
的代码段,但需要将其转换为纯JavaScript。是否有可以帮助我的指南?
var input = $(".form :input").not('button, [type="button"], [type="submit"]').on({
input: return
});
我希望您能够用JavaScript编写这个功能。
在JavaScript中,有一个类似于jQuery的.not()
的方法吗?我有一个$(".form :input").not
的代码段,但需要将其转换为纯JavaScript。是否有可以帮助我的指南?
var input = $(".form :input").not('button, [type="button"], [type="submit"]').on({
input: return
});
querySelectorAll()
中支持NOT子句:document.querySelectorAll(".form :input:not(...)");
示例(jsFiddle):
<div>This should be colored!</div>
<div>This should be colored!</div>
<div id="this-not">This must not colored!</div>
<div>This should be colored!</div>
<div>This should be colored!</div>
var matchedElements = document.querySelectorAll("div:not(#this-not)");
for (var i=0; i<matchedElements.length; i++) {
matchedElements.item(i).style.backgroundColor = "red";
}
document.querySelectorAll("");
。 - derek_duncanUncaught TypeError: undefined is not a function
错误 @dandavis - user3537990.filter()
来排除你的数组中的项目。你可以按照如下方式使用它(MDN的例子):function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
它被所有现代浏览器和IE9+支持。有关更多信息,请参见MDN上的Array.prototype.filter() 。
不幸的是,.filter()
仅适用于数组,因此我们必须进行一些额外的操作来过滤NodeList
。
HTML:
<ul>
<li>1</li>
<li>2</li>
<li class="not-me">3</li>
<li>4</li>
<li>5</li>
</ul>
Javascript:
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]
请参考这个 jsFiddle,里面有一个工作的例子。
Array
。jQuery
集合和NodeList
都不是Array
,不能继承它们的方法。 - Jonathan Lonowskivar 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 + "%";
}
}