我在一个标签插件上使用了jQuery的sortable,这个插件维护了一个与li
相关的对象数组,这些对象的顺序与实际的项目相同。
当排序完成时,我需要更新数组中项目的顺序。
我以为我可以在start事件中调用$(ui).index()
,在update事件中调用相同的方法,这将给我提供初始位置和最终位置,但这两个调用都返回-1
。
我该怎么做呢?
结构:
<ul>
<li>here<a class="close">x</a></li>
<li>are<a class="close">x</a></li>
<li>some<a class="close">x</a></li>
<li>tags<a class="close">x</a></li>
</ul>
数组结构:
[{
label: 'here',
value: 36,
element: '$(the li that this info is about)',
index: 0
},
{
label: 'are',
value: 42,
element: '$(the li that this info is about)',
index: 1
},
{
label: 'some',
value: 21,
element: '$(the li that this info is about)',
index: 2
},
{
label: 'tags',
value: 26,
element: '$(the li that this info is about)',
index: 3
}]
JavaScript:
$('ul').sortable({
start: function(event, ui){...},
update: function(event, ui){...}
});
发布于 2012-05-06 11:26:07
如果.index()
返回-1,则表明您在元素可用于DOM之前发出该请求。或者错误地标记了选择器,并且在调用时该选择器不存在,或者相对于.index()函数为空
发布于 2012-05-06 11:37:18
您可以将一些数据与每个列表项相关联,以跟踪它们,如下所示:
<ul id="sortable">
<li data-id="1" class="ui-state-default">1</li>
<li data-id="2" class="ui-state-default">2</li>
<li data-id="3" class="ui-state-default">3</li>
</ul>
然后,您可以通过jQuery访问此数据,如下所示:
$('ul li:nth-child(0)').data('id');
$('ul li:nth-child(1)').data('id');
$('ul li:nth-child(2)').data('id');
https://stackoverflow.com/questions/10467820
复制相似问题