当我尝试从函数返回对象并将其赋值给smalls变量时,变量smalls为空,因为它的长度返回为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>";
}
虽然这样可行并且变量小号具有所需的长度。
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的了解,可以将函数赋值给变量。我做错了什么?
答案 0 :(得分:3)
您忘记在此处执行smalls
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
答案 1 :(得分:2)
这是因为您必须实际执行该功能,而不仅仅是分配它。 将您的函数赋值更改为自执行匿名函数,这应该可行。
var smalls = (function(){
var table = $("#box-table-a");
return table.find("small");
})(), smallContent;
答案 2 :(得分:2)
正如其他人所提到的,你循环一个函数引用而不是执行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");
这有各种优点:
table-box
的元素只能获得一个类答案 3 :(得分: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>";
}
因为没有整个函数的调用就永远不会调用return。
BTW:
$('#box-table-a .small')
.toggleClass('form-absolute-right',true)
.wrap('<span class="bouble" />')
.parent()
.toggleClass('relative',tru);
甚至可能更好。