我有一个for
声明,如
function myspecialFunction(elem) {
var currentItem = elem;
var currentImg = elem.find('img');
jQuery(currentImg).append('some text');
...
问题似乎是当elem
具有相同图像项的1时 - 它会覆盖之前的数据?也就是说,当返回相同的currentImg
时 - 该语句将覆盖前一个数据?
如何确保保留相同的currentImg
值?即我希望使用类似$(this)
,但它似乎不起作用?我的HTML看起来像
答案 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')返回的值列表?如果是这样,那么我认为你错了。您需要在函数外部限定列表变量。