这是在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!');
            }

        }
    });
}