2012-07-27 40 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