我想要一个能够获得所有非跨距元素的函数。
目前我已经创建了一个获取所有元素的函数,并且还创建了一个空数组。然后它遍历每个元素,如果它们不是跨距,则将它们添加到空数组中。并返回(可能不再为空)数组。
虽然这有效,但感觉效率有点低。我觉得最好不要在第一时间获得跨度,并且必须有一些我不知道的方法。
有没有更有效的方法可以获得所有非跨度的元素? (这适用于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;
}
答案 0 :(得分:6)
querySelector
和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";
});
}