我试图弄清楚,在迭代一些列表项时,如何定位每个" $(this)"嵌套的foreach循环中的等价物。这是我的问题的一个例子:
$('li').each(function(){
// I believe $(this) would target each li item...
$(this).children("li").each(function(){
// ... but how can I target each of these li items? Doesn't $(this) target the original loop?
});
});
答案 0 :(得分:74)
$('li').each(function(){
var $this = $(this);
$this.children("li").each(function(){
$this; // parent li
this; // child li
});
});
答案 1 :(得分:28)
不要使用this
!使用功能参数!
$('li').each(function(i, li){
$(li).children("li").each(function(ii, li2){
$(li)...
$(li2)...
});
});
这更符合本机JavaScript迭代器。
...虽然<li>
不能成为另一个<li>
答案 2 :(得分:10)
查看jQuery函数(或方法,如果你愿意)的基本“原型”:
$[jQobject].[func]([callback]);
回调是将在jQ对象的上下文中调用的函数。显然,上下文为this
。简单地说就是:
$('#foo').click(function(){});
/\ /\
|| Is the context ||
=====================
同样适用于您的情况,无论是否嵌套循环:
$('ul').each(function()
{
//this is ul
var that = this;//you'll often see code like this
$('li', this).each(function()
{
//this is li
//that is parent ul
});
});
答案 3 :(得分:3)
但我如何定位这些礼品? $(this)不针对原始循环吗?
不。
this
来自您直接的功能。
答案 4 :(得分:2)
不,this
指的是每个子<li>
项。尝试一下。
大多数(如果不是全部)与DOM交互的jQuery回调将this
设置为您正在使用的DOM元素。
你也可以写:
$('li').children("li").each(function(){
var $this = $(this);
});