对于陈述问题

时间:2011-08-29 17:10:32

标签: javascript jquery for-loop

我有一个for声明,如

function myspecialFunction(elem) {

var currentItem = elem;
var currentImg = elem.find('img');

jQuery(currentImg).append('some text');
...

问题似乎是当elem具有相同图像项的1时 - 它会覆盖之前的数据?也就是说,当返回相同的currentImg时 - 该语句将覆盖前一个数据?

如何确保保留相同的currentImg值?即我希望使用类似$(this),但它似乎不起作用?我的HTML看起来像

3 个答案:

答案 0 :(得分:1)

您可以将上述内容重写为

jQuery('.class').each(function() {
    myspecialFunction(jQuery(this));
});

function myspecialFunction(elem) {  
    var currentItem = elem;
    var currentImg = elem.find('img');

//....
}

这更具惯用性,$(selector).each()引入了一个闭包,以确保在每次循环迭代中捕获正确的值。

使用plain for循环执行类似操作

var myClass = jQuery('.class');

for (var i = 0, len = myClass.length; i < len; i++) {
    (function () {
        myspecialFunction(jQuery(myClass[i]));
    })();
}

function myspecialFunction(elem) {

    var currentItem = elem;
    var currentImg = elem.find('img');
    // ...
}

根据您的目标浏览器,更具体而不仅仅是CSS类也可能有所帮助,即如果您选择的所有元素都是相同的标记名称,则使用选择器中的标记名称。

答案 1 :(得分:0)

使用jQuery each循环

这样的东西
jQuery('.class').each(function(){
    myspecialFunction($(this));
});

答案 2 :(得分:0)

currentImg是它所在函数的本地...不仅会在每次调用时被覆盖,它甚至不会存在于该函数之外。

是否要创建elem.find('img')返回的值列表?如果是这样,那么我认为你错了。您需要在函数外部限定列表变量。