jQuery find()是'order'特定的'?如果订单发生变化,为什么返回零?

时间:2011-04-22 06:59:26

标签: jquery jquery-selectors

我不是一个jQuery专业版,我花了很长时间才弄明白如何让'it'正常工作

这是一段代码:

$(this).parents('li:eq(0)').find('.dataPostArea').replaceWith(text); //1
$(this).parents('li:eq(0)').find('.hoverMenu').show(); //2

这是html:

<li class="post issuePost" data-winbook-contentType="Issue" data-winbook-issueId="null">
    <div style="display:none;" class="hoverMenu">
        <a href="#delete">
        <img class="hoverButton deleteButton" src="deleteredicon.png"/>
        </a>
        <a href="#edit">
        <img class="hoverButton editButton" src="editpencil.png"/>
        </a>
    </div>
    <div class="postContainer">

        <div class="avatarColumn">

            <a href="#">
            <img src="defaultavatar.jpg"/>
            </a>
            <div class="authorName">
                <a href="#">Nupul</a>
            </div>
        </div>
        <div class="postDetailsContainer">
            <div class="dataPostArea">
                <textarea class="dataForm" style="float:left; min-height:50px; min-width:330px; resize:none; margin:2px; margin-bottom:5px; overflow-x:hidden;" name="data">
                </textarea>
                <button class="addDataButton"    style="width:95px; margin:3px 2px; padding:1px 4px 1px 4px;">
                    Add Issue
                </button>
                <button class="cancelDataButton" style="width:95px; margin:3px 2px; padding:1px 4px 1px 4px;">
                    Cancel
                </button>
                <div class="clear"/>
                    <span>10 characters left</span>
                </div>
            </div>
        </div>
        <div class="clear">
        </div>
</li>

现在,如果1和2的顺序如图所示'.hoverMenu'永远不会显示。实际上,jQuery对象的大小为零!如果2在1之前它工作正常。我不知道为什么。有什么想法吗?

(如果你想知道我想要完成什么:只需在可编辑的textarea中获取内容并用该列表项的内容替换textarea。类似于stackoverflow的“添加注释”功能:)

我可能正在执行不正确的“查询”,并且非常欢迎更正。我没有缓存$(this).parents('li:eq(0)'),也不认为这个问题应该重要。 (应该吗?)

1 个答案:

答案 0 :(得分:1)

您的$(this)对象是<button class="addDataButton">,对吗?一旦发布,你用txt替换它。 corrrect?

发生了什么事就是这一行

$(this).parents('li:eq(0)').find('.dataPostArea').replaceWith(text); //1

将删除按钮对象$(this),然后使第二行无效。这就是为什么它告诉你它不存在(没有发现任何),这就是为什么当你切换它的时候

如果您想保持订单执行此操作

listelement  = $(this).parents('li:eq(0)');
listelement.find('.dataPostArea').replaceWith(text);
listelement.find('.hoverMenu').show();