获取元素标签名排除特定元素(过滤)

9

我有一个像这样的 JavaScript 选择器:

var inputs = document.getElementsByTagName("input");

这个很好用,但是我想过滤掉一些输入(那些带有“exists”类的输入)。
没有使用jQuery,我该怎么做?

4
遍历元素,并将您想要保留的元素放入数组中。如果浏览器中可用querySelectorAll,建议使用它。 - Felix Kling
@felix-kling 我想要类似这样的代码:var inputs = document.getElementsByTagName("input:not('.existent')"); 我需要在旧版浏览器上使用这段代码。 - Adrian Florescu
是的,那样做不行。这就是为什么我说你必须迭代元素,测试它们是否具有该类,如果没有,保留它(将其放入另一个数组)的原因。 - Felix Kling
@Florescu,支持CSS选择器,支持旧版浏览器,不使用jQuery。请选择其中两个。 - Frédéric Hamidi
@FrédéricHamidi :) 我不使用常规的JavaScript,这就是我问这个问题的原因。使用jQuery很简单:$('inputs').not('.exists'),它会给我一个数组,但这个脚本是由别人编写的,我需要找到一个解决方法... - Adrian Florescu
可能是重复的问题:JS getElementsByTagName excep the one with a speciffic class - Felix Kling
1个回答

13

这就是你需要的:

var inputs = document.getElementsByTagName("input");
var neededElements = [];
for (var i = 0, length = inputs.length; i < length; i++) {
    if (inputs[i].className.indexOf('exists') >= 0) {
        neededElements.push(inputs[i]);
    }
}

或者简而言之(如下由knee-cola提供):


let neededElements = [].filter.call(document.getElementsByTagName('input'), el => el.className.indexOf('exists') >= 0);

5
可以使用数组对象的过滤函数(filter function),使其更加简短。例如:let neededElements = [].filter.call(document.getElementsByTagName('input'), el => el.className.indexOf('exists') >= 0); - knee-cola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接