保留jQuery .each()函数中的变量值

时间:2014-09-02 10:38:24

标签: jquery find each

我有一个jQuery的每个函数,并设置一个名为' last_header'的变量。在它里面,但只有当变量的条件称为“标题”时才会出现。不是空的。我遇到的问题是每个函数的每个循环,' last_header'变量值未被保留并设置为未定义。我希望在上次设置时保留该变量的值。

$('#hidden_specs_' + i + ' tr').each(function() {
    var header = $(this).find('th').html();
    if (header !== null) {
        var last_header = $.trim(header); //THIS IS THE VARIABLE I WANT TO RETAIN ON THE NEXT LOOP THROUGH
    }
   alert(last_header); //THIS RETURNS UNDEFINED UNLESS IT HAS BEEN SET IN THIS LOOP

});

我希望这有道理吗?

真的很感激任何帮助。

非常感谢, 标记

3 个答案:

答案 0 :(得分:1)

这是因为变量的范围不存在。您需要将变量设置为每个循环外的全局变量。像这样的东西:

var last_header = "";
$('#hidden_specs_' + i + ' tr').each(function() {
var header = $(this).find('th').html();
if (header !== null) {
    last_header = $.trim(header); //THIS IS THE VARIABLE I WANT TO RETAIN ON THE NEXT LOOP THROUGH
}
alert(last_header); 
});

<强> WORKING DEMO

答案 1 :(得分:1)

您可以使用HTML5自定义属性来实现该功能。我已更新您的代码,如下所示:

$('#hidden_specs_' + i + ' tr').each(function() {
var header = $(this).find('th').html();
if (header !== null) {
    var last_header = $.trim(header); 
    $("body").data("last_header",$.trim(header)); // but if your condition satisfies then the value will be overridden.
}  

alert($("body").data("last_header")); //THIS IS THE LINE WHICH WILL GIVE YOUR LAST SET VALUE
});

希望这会有所帮助:)

答案 2 :(得分:0)

您需要在循环外声明变量

//declare the variable outside the loop
var last_header;
$('#hidden_specs_' + i + ' tr').each(function () {
    var header = $(this).find('th').html();
    if (header !== null) {
        last_header = $.trim(header); //THIS IS THE VARIABLE I WANT TO RETAIN ON THE NEXT LOOP THROUGH
    }
    alert(last_header); //THIS RETURNS UNDEFINED UNLESS IT HAS BEEN SET IN THIS LOOP

});
alert(last_header);

在您的情况下,变量范围仅限于each回调函数,因此变量在循环外不可用。