这是在JavaScript中使用两个循环的正确方法吗
我在这里尝试检查两件事,使用两种不同的这是在JavaScript中使用两个循环的正确方法吗,javascript,jquery,for-loop,Javascript,Jquery,For Loop,我在这里尝试检查两件事,使用两种不同的检查循环。如果一个元素有一个属性,它就工作了!第二个循环应该检查alt标记是否为空。我认为将第一个迭代器值传递给第二个将分派第二个循环。但那不行!有人能帮我解决这个问题吗 function altChecker() { var doc = document, getStartedBtn = doc.getElementById('getStartedBtn'); EventUtility.addHandler(ge
检查循环。如果一个元素有一个属性
,它就工作了!第二个循环应该检查alt标记是否为空。我认为将第一个迭代器值传递给第二个将分派第二个循环。但那不行!有人能帮我解决这个问题吗
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');
}
};
});
}
函数altChecker(){
var doc=文件,
getStartedBtn=doc.getElementById('getStartedBtn');
addHandler(getStartedBtn,'click',函数(){
var all=doc.getElementsByTagName(“IMG”);
console.log('success!');
对于(变量i=0,max=all.length;i
如果出现以下情况,则在第2行中缺少.length属性:
max2=all
应该是max2=all.length
如果要在all集合中循环两次,则在第二个循环中遗漏了all的length属性,并且需要从0开始j变量
for (var j = i, max2 = all; j < max2; j++) {
你可以在一个循环中完成。检查属性是否存在后,检查alt的值
请注意,alt
是img
标记的标准属性,但不是div
。在这个示例中,我对非标准属性使用了.getAttribute
。如果我使用了img
标记,那么.getAttribute
可以替换为.alt
,因为这是标记的标准属性。见评论
函数altChecker(){
var out=[];
var doc=单据;
var all=doc.getElementsByTagName(“div”);
对于(变量i=0,max=all.length;i
-
-
-
-
我认为不需要两个循环
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!');
}
}
});
}
函数altChecker(){
var doc=文件,
getStartedBtn=doc.getElementById('getStartedBtn');
addHandler(getStartedBtn,'click',函数(){
var all=doc.getElementsByTagName(“IMG”);
console.log('success!');
对于(变量i=0;i
你在说什么iterator
?顺便说一句,看看max=all.length
和max2=all
之间的区别。你应该像往常一样用0
初始化j
,而不是用i
,在进入第二个循环时,==max
。声明max
和max2
在哪里?为什么需要2个循环呢?也可以考虑使用<代码>所有[j]。ALT而不是<代码> $(全部[j])。AtTr('ALT')< /C> >以避免完全不必要的(慢)jQuery调用哪一个循环?当被检查的属性是该元素的标准属性时,不需要调用.getAttribute
——您可以使用all[i].alt
。但是,如果要检查属性是否确实存在于HTML标记中,则需要使用.hasAttribute
,因为.alt
的默认值是空字符串。@Alnitak我切换了它,但效果很奇怪。第二次尝试后,alt开始返回“undefined”。这可能是浏览器的一个bug,但是.getAttribute似乎是一致的,所以我把它调回了。我使用的是FF 40.0.3my注释,应用于OP对
标记的使用,该标记的alt
是标准属性,但在您的示例中,您使用了
元素。我不相信浏览器会为元素上的意外属性生成属性是有保证的。@Alnitak啊,现在说得通了。我想知道为什么id
没有同样的问题。
$.each(all, function(idx, each){...});
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!');
}
}
});
}