每次迭代都在jQuery中定义元素

Mon*_*ain 1 javascript jquery

我正在尝试迭代jQuery元素的集合,如下所示:

var l = $(".ace_line").length;
$(".ace_line").each($(function(index,element) {
    console.log("Element = " + element);
    console.log(index + ": " + element.text());
}));
Run Code Online (Sandbox Code Playgroud)

当我检查l它的值是39所以我知道该集合不是null.但是element当我遍历集合时,未定义.

我究竟做错了什么?

任何帮助,将不胜感激!

T.J*_*der 6

那里有几个问题:

  1. 你正在回调你的回调$(),这让jQuery认为你正在使用简写版本$(document).ready(function...).由于DOM已准备就绪,它会调用该函数(一次)将jQuery实例作为第一个参数传递,而根本不传递第二个参数.

  2. 没有$()在附近使用element.element将只是一个DOM元素,而不是一个jQuery实例,所以要调用text它,你需要先包装它.

所以:

var l = $(".ace_line").length;
$(".ace_line").each(function(index,element) {
// No $( here ------^
    var $el = $(element);                     // <=== Do wrap `element`
    console.log("Element = " + $el);
    console.log(index + ": " + $el.text());   // <=== Use $el
}); // <== Removed a ) here
Run Code Online (Sandbox Code Playgroud)

请注意,更常见的事情是使用this:

var l = $(".ace_line").length;
$(".ace_line").each(function(index) {
    var $el = $(this);                        // <===
    console.log("Element = " + $el);
    console.log(index + ": " + $el.text());   // <===
});
Run Code Online (Sandbox Code Playgroud)

  • 感谢大家的帮助.TJCrowder的答案得到了很好的解释,并帮助我解决了我的问题所以我接受了这个问题. (2认同)