针对jQuery中的每个循环嵌套$(this)
我试图弄清楚,当迭代通过一些列表项时,如何在嵌套的foreach循环中定位每个“$(this)”等价物。 这是我的问题的一个例子:
$('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? }); });
$('li').each(function(){ var $this = $(this); $this.children("li").each(function(){ $this; // parent li this; // child li }); });
不要使用this
! 使用function参数!
$('li').each(function(i, li){ $(li).children("li").each(function(ii, li2){ $(li)... $(li2)... }); });
这更符合本机JavaScript迭代器。
…虽然一个<li>
不能是另一个<li>
的直接子
看看jQuery函数的基本“原型”(或方法,如果你愿意的话):
$[jQobject].[func]([callback]);
callback函数将在jQ对象的上下文中被调用。 显而易见的是上下文。 简而言之,这意味着:
$('#foo').click(function(){}); /\ /\ || Is the context || =====================
不pipe循环是嵌套还是不嵌套,这同样适用于你的情况:
$('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 }); });
但是我怎么能瞄准这些李项目? $(this)不是以原始循环为目标吗?
不。
this
来自你直接的function。
不, this
是指每个孩子<li>
项目。 试试看。
大多数(如果不是全部的话)与DOM交互的jQuerycallback会将其设置为您正在使用的DOM元素。
你也可以写:
$('li').children("li").each(function(){ var $this = $(this); });