请说出语法解释

时间:2010-09-21 09:01:41

标签: javascript jquery

我正在尝试理解下面两行不同的代码。我的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受理人选择每个属性?

3 个答案:

答案 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.