获取所有未跨越的元素

时间:2015-01-19 10:58:47

标签: javascript ios epub getelementsbytagname

我想要一个能够获得所有非跨距元素的函数。

目前我已经创建了一个获取所有元素的函数,并且还创建了一个空数组。然后它遍历每个元素,如果它们不是跨距,则将它们添加到空数组中。并返回(可能不再为空)数组。

虽然这有效,但感觉效率有点低。我觉得最好不要在第一时间获得跨度,并且必须有一些我不知道的方法。

有没有更有效的方法可以获得所有非跨度的元素? (这适用于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;
}

1 个答案:

答案 0 :(得分:6)

querySelectorfriends接受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";
    });
}