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);
});