我正在尝试将代码添加到我的应用程序中。
var seachHttp = function () {
var cssSheets = document.styleSheets, // Loaded CSS Sheets
i =0, il = cssSheets.length, // Counter and limit for sheets
j, jl, rules, rule, // Counter and vars for Rules inside a Sheet
stylesToSearch = [ // Properties to Seach HTTP ON
'background',
'background-image',
],
k, kl=stylesToSearch.length, // Counter for properties
s, // Current Property
v // Current Value;
for(;i<il;i++) { // Loop Sheets
rules = cssSheets[i].rules || cssSheets[i].cssRules;
for(j=0,jl=rules.length;j<jl;j++) { // Loop Rules
rule = rules[j];
for(k=0;k<kl;k++){ // Loop Styles
s = stylesToSearch[k];
v = rule.style[s]; // Get Value from Current Style
if ( v !== undefined && v.toString().toLowerCase().indexOf("http") > -1 ) { // Seach for HTTP Content
//alert("Found HTTP at " + rule.selectorText + " " + s + " = " + rule.style[s]);
return true;
} else {
return false;
}
}
}
}
}
问题是,为什么上面的代码总是返回false,尽管它应该返回true?
然后我使用条件来检查结果是真还是假。
这是我用来测试真假的条件:
if (div_array.length > 0 || seachHttp() == true) {
这可能会改善吗?
答案 0 :(得分:2)
该函数有效地测试了第一个样式表的第一个选择器的第一个规则 ONLY
如果您返回false,则不返回false
在函数结束时返回false
答案 1 :(得分:2)
因为只要您点击的规则值与您的真实条件不符,就会返回false。基本上,只要您点击不包含“http”的背景或背景图像规则,即使后来的规则符合您的条件,您的函数也会返回false。
尝试在循环后返回false值,并且只有在符合条件时才返回true。见下文的修正案。
var seachHttp = function () {
var cssSheets = document.styleSheets, // Loaded CSS Sheets
i =0, il = cssSheets.length, // Counter and limit for sheets
j, jl, rules, rule, // Counter and vars for Rules inside a Sheet
stylesToSearch = [ // Properties to Seach HTTP ON
'background',
'background-image',
],
k, kl=stylesToSearch.length, // Counter for properties
s, // Current Property
v; // Current Value
for(;i<il;i++) { // Loop Sheets
rules = cssSheets[i].rules || cssSheets[i].cssRules;
for(j=0,jl=rules.length;j<jl;j++) { // Loop Rules
rule = rules[j];
for(k=0;k<kl;k++){ // Loop Styles
s = stylesToSearch[k];
v = rule.style[s]; // Get Value from Current Style
if ( v !== undefined && v.toString().toLowerCase().indexOf("http") > -1 ) { // Seach for HTTP Content
//alert("Found HTTP at " + rule.selectorText + " " + s + " = " + rule.style[s]);
return true;
}
}
}
}
return false;
}
答案 2 :(得分:1)
你有if () return true; else return false;
。这意味着您只能访问所有for循环中的第一个条目并从中返回。在for循环之后你可能想要return false
。