的Javascript - 分配函数变量预期不起作用
问题描述:
当我试图从函数返回的对象并将其分配给小商品变量,变量小商品是空的,因为它的长度返回为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的知识,可以将函数分配给一个变量。我究竟做错了什么?
答
执行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
答
尝试
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);
甚至可能更好。
答
这是因为您必须实际执行该功能,而不仅仅是分配它。 将您的函数分配更改为自动执行匿名函数,这应该工作。
var smalls = (function(){
var table = $("#box-table-a");
return table.find("small");
})(), smallContent;
答
你忘了这里
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
你是什么意思的“不工作”? – 2012-07-27 10:53:40
是的,你*将一个函数赋值给一个变量。但你为什么需要它? – Bergi 2012-07-27 11:06:17
保罗布彻 - 编辑的问题更有意义! – 2012-07-27 11:18:45