获取所有不是 span 的元素

Get all elements that are not spans

我想要一个获取所有非跨度元素的函数。

目前我已经制作了一个获取所有元素的函数,也制作了一个空数组。然后它遍历每个元素,如果它们不是跨度,则将它们添加到空数组中。 returns(可能不再为空)数组。

虽然这有效,但感觉有点低效。我觉得一开始甚至不获取跨度会更好,而且一定有一些我不知道的方法可以做到这一点。

有没有更有效的方法来获取所有非 span 的元素? (这是针对在 iOS 中显示在 UIWebViews 中的 epub,而不是 jquery)

这是我当前的代码。如果我做错了什么,我深表歉意,因为我不是 javascript 人:

function allElementsExceptSpans()
{
    var result = new Array();
    var allElements = document.getElementsByTagName('*');
    for (var i = 0; i < allElements.length; i++)
    {
        if ((allElements[i].tagName != "span")
            && (allElements[i].tagName != "SPAN"))
        {
            result.push(allElements[i]);
        }
    }
    return result;
}

querySelector and friends 接受一个 CSS 选择器作为他们的参数。

var not_span = document.querySelectorAll(":not(span)");

如果您想简化现有方法,那么您可以考虑使用 toLowerCase 而不是两个不同的字符串比较,并使用 Array.prototype.filter 而不是手动复制值:

function allElementsExceptSpans()
{
    return Array.prototype.filter.call(document.getElementsByTagName("*"), function(element) {
        return element.tagName.toLowerCase() !== "span";
    });
}