我试图在这里检查两件事,有两个不同的for loops
。如果一个元素有attribute
,那就有效!第二个循环应检查alt标记是否实际为空。我想将第一个iterator
值传递给第二个将调度第二个循环。但这不起作用!有人可以帮我解决这个问题吗?
function altChecker() {
var doc = document,
getStartedBtn = doc.getElementById('getStartedBtn');
EventUtility.addHandler(getStartedBtn, 'click', function() {
var all = doc.getElementsByTagName("IMG");
console.log('success!');
for (var i = 0, max = all.length; i < max; i++) {
if (all[i].hasAttribute('alt')) {
console.log('Yes, this has a ' + all[i].nodeName + ' tag!');
} else {
console.log('Sorry ' + all[i].nodeName + ' tag, doesn\'t have an alt tag!');
}
}
for (var j = i, max2 = all; j < max2; j++) {
if(! $(all[j]).attr('alt')){
console.log('This is empty');
} else {
console.log('This aint');
}
};
});
}
答案 0 :(得分:1)
你可以在一个循环中完成。检查属性是否存在后检查alt的值。
请注意,alt
是img
标记的标准属性,但不是div
。在示例中,我使用.getAttribute
作为非标准属性。如果我使用img
标记,则.getAttribute
可以替换为.alt
,因为这是标记的标准属性。见评论。
function altChecker() {
var out = [];
var doc = document;
var all = doc.getElementsByTagName("div");
for (var i = 0, max = all.length; i < max; i++) {
var id = all[i].id;
if (all[i].hasAttribute('alt')) {
out.push(id + ' has alt');
var value = all[i].getAttribute('alt');
if (value != "") {
out.push(id + ' alt="' + value + '"');
} else {
out.push(id + ' alt is empty');
}
} else {
out.push(id + ' does not have alt');
}
}
doc.getElementById('output').innerHTML = out.join("\n");
}
altChecker();
<div id='a' alt='foo'>-</div>
<div id='b' alt='bar'>-</div>
<div id='c' alt=''>-</div>
<div id='d'>-</div>
<pre id='output'></pre>
答案 1 :(得分:1)
我认为不需要2个循环
function altChecker() {
var doc = document,
getStartedBtn = doc.getElementById('getStartedBtn');
EventUtility.addHandler(getStartedBtn, 'click', function() {
var all = doc.getElementsByTagName("IMG");
console.log('success!');
for (var i = 0; i < all.length; i++) {
if (all[i].hasAttribute('alt')) {
if (all[i].alt === '') {
console.log('this has a ' + all[i].nodeName + ' tag BUT it is empty!');
} else {
console.log('Yes, this has a ' + all[i].nodeName + ' tag and it is NOT empty!');
}
} else {
console.log('Sorry ' + all[i].nodeName + ' tag, doesn\'t have an alt tag!');
}
}
});
}
答案 2 :(得分:0)
你错过了第二个if中的.length属性:
max2 = all
应为max2 = all.length
答案 3 :(得分:0)
如果你打算循环遍历所有集合两次,你在第二个循环中错过了所有的长度属性,你需要从0开始j变量。
for (var j = i, max2 = all; j < max2; j++) {
应该是:
for (var j = 0, max2 = all.length; j < max2; j++) {
这两个循环是完全独立的,只是遍历所有集合;你用完全相同的方式写它们。
这样的错误是我通常使用功能习语进行循环的原因:
$.each(all, function(idx, each){...});