我正在尝试理解下面两行不同的代码。我的javascript很弱,试图用jquery(hmmmm)来改进它
我正在尝试使用http://dragsort.codeplex.com/中的拖动排序插件,特别是我正在使用http://dragsort.codeplex.com/SourceControl/changeset/view/74794#1025059示例。
我已经到了现在使用这种方法的阶段
var serialStr = "";
$("#list1 li").each(function(i, elm) {
serialStr = (i > 0 ? "|" : "") + $(elm).children().html();
});
该示例具有以下内容。
var serialStr = new Array();
$("#list1 li").each(function(i, elm) {
serialStr[] = = $(elm).attr("itemId");
});
我有第一种方法的原因是我正在测试所有内容以及它们在HTML示例中的内容。我现在正试图保存状态,所以我已经转移到php示例。
所以我的问题是这里不同线路的主要区别是什么?我对第一行的理解是它在list1上选择li标签内的每个子元素我并没有真正得到(i> 0?“|”:“”)位。
在我理解的第二个snipplet中,它使用list1 li中的itemID受理人选择每个属性?
答案 0 :(得分:1)
serialStr[] = (i > 0 ? "|" : "") +$(elm).children().html()
是一个速记if-clausule。它与:
if(i > 0) {
serialStr[] = "|" +$(elm).children().html();
} else {
serialStr[] = "" +$(elm).children().html();
}
答案 1 :(得分:0)
表达式(i > 0 ? "|" : "")
正在使用conditional operator condition ? expr1 : expr2
不要将第一个值加上|
的前缀,而只是每个后面的值。
但表达式serialStr[] = = $(elm).attr("itemId")
是无效的语法。 Javascript没有像PHP那样的推送操作符[]
。请改用Array.prototype.push
。
答案 2 :(得分:0)
我认为你没有完全粘贴代码,因为这两段代码都没有意义。第一个似乎想要将字符串连接在一起,但缺少会导致这种情况发生的+=
;第二个是制作一个列表,大概是后来join()
,但是使用了一些JavaScript中不存在的奇怪的[]=
语法。
我真的没有(i> 0?“|”:“”)位。
首次围绕循环,选择""
,然后选择"|"
。这是制作字符串的传统方法,其中每个元素由一个字符分隔。
但join()
通常是一种更简洁的方法,您可以使用map()
在返回新数组的数组上运行函数,而不必手动创建一个:
var itemIds= $('#list1 li').map(function() {
return $(this).attr('itemId');
}).get().join('|');
(或$(this).html()
如果您真的想要获取HTML内容,这听起来有点可疑。)
map()
是一个jQuery函数,但ECMAScript第五版在普通数组上也有一个map()
方法。 About map in general.