2012-07-27 89 views
1

当我试图从函数返回的对象并将其分配给小商品变量,变量小商品是空的,因为它的长度返回为0的Javascript - 分配函数变量预期不起作用

var smalls = function(){ 
     var table = $("#box-table-a"); 
     return table.find("small"); 
    }, smallContent; 
    for(var i = 0; i<smalls.length; i++){ 
     smallContent = smalls[i].innerHTML; 
     smalls[i].parentElement.className += "relative"; 
     smalls[i].className += "form-absolute-right"; 
     smalls[i].innerHTML = "<span class='bubble'>" + smallContent + "<span>"; 
    } 

虽然这个工作和变量小有所需的长度。

var table = $("#box-table-a"); 
    var smalls = table.find("small");  //fetch the tr's with <small> tag 
    var smallContent; 
    for(var i = 0; i<smalls.length; i++){ 
     smallContent = smalls[i].innerHTML; 
     smalls[i].parentElement.className += "relative"; 
     smalls[i].className += "form-absolute-right"; 
     smalls[i].innerHTML = "<span class='bubble'>" + smallContent + "<span>"; 
    } 

根据我对JavaScript的知识,可以将函数分配给一个变量。我究竟做错了什么?

+1

你是什么意思的“不工作”? – 2012-07-27 10:53:40

+0

是的,你*将一个函数赋值给一个变量。但你为什么需要它? – Bergi 2012-07-27 11:06:17

+0

保罗布彻 - 编辑的问题更有意义! – 2012-07-27 11:18:45

回答

2

执行smalls正如其他人所说,你遍历一个函数引用,而不是从执行smalls结果。

然而,正如你使用jQuery,你可以写短/简单的代码:

var smalls = $("#box-table-a").find("small"); // this var really contains the elements 
smalls.addClass("form-absolute-right").wrapInner("<span class='bubble' />"); 
smalls.parent().addClass("relative"); 

这具有多种优点:

  • 的类简单地添加到列表中,你不不得不担心空格。
  • wrapInner确实保留了DOM(与所有听众等),而不是用HTML字符串搞乱
  • 父()遍历方法的唯一身份设定,所以具有一个以上table-box元素都只能得到一个类
  • 你不根本不需要循环,jQuery方法在集合中的每个项目上执行。
+0

Bergi - 哇。从来不知道我不需要一个循环。感谢分享知识! – 2012-07-27 11:23:48

0

尝试

var smalls = function(){ 
    var table = $("#box-table-a"); 
    return table.find("small"); 
}, smallContent; 
for(var i = 0; i<smalls().length; i++){ 
    smallContent = smalls()[i].innerHTML; 
    smalls()[i].parentElement.className += "relative"; 
    smalls()[i].className += "form-absolute-right"; 
    smalls()[i].innerHTML = "<span class='bubble'>" + smallContent + "<span>"; 
} 

因为回报将永远不会被称为不整函数的调用。

BTW:

$('#box-table-a .small') 
    .toggleClass('form-absolute-right',true) 
    .wrap('<span class="bouble" />') 
    .parent() 
    .toggleClass('relative',tru); 

甚至可能更好。

2

这是因为您必须实际执行该功能,而不仅仅是分配它。 将您的函数分配更改为自动执行匿名函数,这应该工作。

var smalls = (function(){ 
    var table = $("#box-table-a"); 
    return table.find("small"); 
})(), smallContent; 
3

你忘了这里

var smalls = function(){ 
     var table = $("#box-table-a"); 
     return table.find("small"); 
    }, smallContent; 
    for(var i = 0; i<smalls.length; i++) 
//     ^smalls is a function pointer 

var smalls = function(){ 
      var table = $("#box-table-a"); 
      return table.find("small"); 
     }(), smallContent; 
//  ^execute the function 
     for(var i = 0; i<smalls.length; i++) 
//      ^smalls is a nodeList 
相关问题