2010-09-21 136 views
2

我想了解下面的2个不同的代码行。我的JavaScript是薄弱的,试图改进它与jQuery(嗯)语法解释请

我想使用拖动排序插件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示例。

所以我的问题是在这里的不同行中发生的主要区别是什么?我对第一行的理解是,它选择列表1中的li标签中的每个子元素,我没有真正得到(i> 0?“|”:“”)位。

从我理解的第二个小窍门中选择list1 li中的itemID受让人的每个属性?

回答

1

serialStr[] = (i > 0 ? "|" : "") +$(elm).children().html()是一个简写if-clausule。它同样为:

if(i > 0) { 
serialStr[] = "|" +$(elm).children().html(); 
} else { 
serialStr[] = "" +$(elm).children().html(); 
} 
+0

[Ternary Operator](http://en.wikipedia.org/wiki/%3F :) – Reigel 2010-09-21 09:15:40

+0

@Reigel:它只是* a *三元运算符,因此它有三个操作数。官方条款是*条件运算符*。 – Gumbo 2010-09-21 09:17:59

+0

谢谢,我不知道它的名字:P – 2010-09-21 09:20:43

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.