我正在检查某些元素是否存在:
if ($(selector).length > 0){
....
}
但是,有时返回的对象(即使元素存在于DOM中并且已返回)也没有length属性,因此永远不会计算为true。 此错误出现在chrome中。 你知道问题可能是什么吗?
编辑: 我使用这段代码:
var variable;
for(let elem in selectors){
if($(elem).length > 0){
variable = true;
break;
}
else
variable = false;
}
给定选择器列表,如果存在至少一个选择器,则variable
为真。这是在谷歌浏览器扩展程序的内容脚本中。在插件中运行此代码后,即使在谷歌浏览器的控制台中,我也会遇到同样的问题。
编辑: 此代码不会产生问题:
var variable;
if($(elem).length > 0){
variable = true;
}
else
variable = false;
它认为问题是for
循环或/和break;
语句。但是,需要一个for循环来使这个代码适用于选择器列表,而不只是一个。
答案 0 :(得分:0)
如果这是因为未加载html,那么我们可以使用超时
现在我从代码中理解的是你正在使用for循环选择器,所以选择器应该作为数组而不是其中的元素(elem here)不是数组所以elem将如何长度?
setTimeout(function(){
if ($(selector).length > 0){
for(let elem in selectors){
if($(elem)){
variable = true;
break;
}
else
variable = false;
}
}
},100);
答案 1 :(得分:0)
它认为document.querySelectorAll()
不会产生同样的问题并按预期工作。所以我使用了这个而不是$()。如果您只想检查元素是否存在,那么它的工作正常。
因此,如果网页中至少存在一个选择器,则此代码始终返回true:
function exists(selectors){
var selectorExists = false;
for(let i=0; i < selectors.length; i++){
let element = document.querySelectorAll(selectors[i]);
if(element.length > 0){
selectorExists = true;
break;
}
}
return selectorExists;
}