Javascript 为什么jQuery每次都输出相同的rel?

Javascript 为什么jQuery每次都输出相同的rel?,javascript,jquery,html,Javascript,Jquery,Html,基本上我的剧本是这样的: 代码- jQuery(document).ready(function() { var rel = new Array(); var count = 0; jQuery(".setting").each(function() { rel[count] = []; if(jQuery("span").attr("rel")) { rel[count].push(jQuery("span").

基本上我的剧本是这样的:

代码-

jQuery(document).ready(function() {
    var rel = new Array();
    var count = 0;
    jQuery(".setting").each(function() {
        rel[count] = [];
        if(jQuery("span").attr("rel")) {
            rel[count].push(jQuery("span").attr("rel"));
        }  
        console.log(count);
        count++;
    });               
    jQuery("body").text(rel);
    console.log(rel);
});​

希望你明白我的意思:)

编辑:


在我的另一个示例中,我尝试将jQuery(“span”).each(function()…首先添加到每个函数中,但它输出了两个完整的数组,其中包含所有带有rel的span元素。我不能为每个div元素添加不同的类/id,因为所有元素都具有相同的类。

您应该使用以下方法:

    jQuery('span',this).each(function() {
        rel[count] = [];
        if (jQuery(this).attr("rel")) {
            rel[count].push(jQuery(this).attr("rel"));
        }
        console.log(count);
        count++;
    })
与此相反:

    rel[count] = [];
    if(jQuery("span").attr("rel")) {
        rel[count].push(jQuery("span").attr("rel"));
    }  
    console.log(count);
    count++;


诀窍是使用第二个
。每个
循环遍历每个
中的所有
span
标记——您的原始代码使用的是
jQuery(“span”)
,每次只需抓取文档中的第一个
span
标记。

jQuery(“span”)
将在您的页面中查找所有span,然后拉出第一个span的
rel
属性。由于您没有为span搜索提供上下文,因此在文档中始终会得到相同的#1 span。

中。each()
方法中,您有几次此代码:
jQuery(“span”).attr(“rel”)
。该代码只是查找页面上的所有
span
标记。当您将其粘贴到
.push()
方法中时,它只会推送集合中第一个jQuery对象的
rel
属性的值。相反,您希望执行类似于
$(this)的操作。find('span'))
。这将导致它查找当前
的后代的任何
span
标记。设置
元素。每个()方法都要迭代。

除了已经说过的内容之外,在使用
jQuery.fn.map()时,还可以去掉
计数
和一个
推送()
以及在将
[rel]
添加到选择器时取消
if

jQuery(document).ready(function() {
    var rel = [];
    jQuery(".setting").each(function() {
        rel.push(jQuery(this).find('span[rel]').map(function() {
            return this.getAttribute('rel');
        }).get());
    });               
    jQuery("body").text(rel);
    console.log(rel);
});

任何原因
rel
都是一个数组数组,每个数组只有一项?我认为关键在于jQuery
.find()
函数。它可以让您从DOM树中的特定点开始查找元素。我希望所有这些问题都像这个问题一样准备好。我是否应该添加jQuery(this.children)(“span”)?这能解决问题吗?如果您解释了为什么他们应该使用一种方法而不是另一种方法,或者为什么原始方法不正确,我认为这个答案会有很大的改进。您不能通过执行
$.each($(this).find('span[rel]')来摆脱if语句吗
?,还有,为什么不向他展示如何保护jQuery函数,这样他就不必每次都编写糟糕透顶的6个字符长的“jQuery”语法!@ohgod为什么我认为他使用
jQuery
是有充分理由的。可能有很多方法可以进一步优化此代码,但为了帮助OP学习,我保留了我的尽量减少对代码的更改。@Blazemonger我认为,就您的代码而言,您应该向他演示如何执行
(函数($){/$variable sanitized and safe})(jQuery);
。传授知识很好。无论如何,我还是投了赞成票。
    rel[count] = [];
    if(jQuery("span").attr("rel")) {
        rel[count].push(jQuery("span").attr("rel"));
    }  
    console.log(count);
    count++;
jQuery(document).ready(function() {
    var rel = [];
    jQuery(".setting").each(function() {
        rel.push(jQuery(this).find('span[rel]').map(function() {
            return this.getAttribute('rel');
        }).get());
    });               
    jQuery("body").text(rel);
    console.log(rel);
});