如何获取父项的id和li项的位置

时间:2009-09-18 16:17:37

标签: jquery html parent-child parent

我想通过拖放更改嵌套导航,我找到一个不错的插件。现在我想将更改存储在数据库中,但不幸的是我无法读出父元素的id。我需要的第二件事是列表中拖动的li元素的新位置

<script type="text/javascript" src="includes/jquery/jquery.js"></script>
<script type="text/javascript" src="includes/jquery/interface.js"></script>
<script type="text/javascript" src="includes/jquery/inestedsortable-1.0.pack.js"></script>
<script type="text/javascript">
    jQuery( function($) {
        $('#Hnav, #Nnav').NestedSortable(
            {
                accept: 'sort',
                noNestingClass: "no-children",
                helperclass: 'helper',
                autoScroll: true,
                onChange: function(serialized) {
            onStop : function(){
              $('#output').html($(this).id); // works fine
              $('#output').html($(this).parent().parent().att('id')); // fail
                  $('#output').html(this.closest('li').att('id')); // fail
            },
                nestingPxSpace : '0'
            }
        );
    });
</script>

HTML

<div id="sitemap">
<ul id="Hnav">
  <li id="n1"><a href="contentsite.php?cont=1">Home</a></li>
  <li id="n2" class="sort"><a href="contentsite.php?cont=2">Choir</a>
    <ul class="level2">
      <li id="n4" class="sort"><a href="contentsite.php?cont=3">lkff</a></li>
      <li id="n6" class="sort"><a href="contentsite.php?cont=5">changethis</a></li>
      <li id="n5" class="sort"><a href="contentsite.php?cont=4">History</a></li>
    </ul>
  </li>

...

有什么想法吗?谢谢。

拉​​拉

2 个答案:

答案 0 :(得分:4)

我的猜测是,如果您在this上调用$(),则必须使用parent()语法包裹$('#output').html(this.id); // works fine $('#output').html($(this).parent().parent().attr('id')); $('#output').html($(this).closest('li').attr('id'));

.id

编辑:

我已根据您的评论更新了代码。 jQuery对象不支持.attr('id'),它们必须使用{{1}}。

答案 1 :(得分:1)

你可以使用:

 $('#output').html($(this).parent().parent().attr('id')); // or
 $('#output').html($(this).closest('li').attr('id')); // or
 $('#output').html(this.parentNode.parentNode.id);