使用jquery获取动态创建的元素后代的孩子的.html?

时间:2016-08-26 20:20:46

标签: jquery

我试图使用post-content-[[!+post.id]]获取.on('click')的.html(),然而,控制台一直告诉我.parent() {{1}没有功能} ...

我的HTML ...

.previous()

和我的剧本......

<div class="post-wrapper">
    <div class="post-header">
        <div class="post-avatar floatLeft">
            <a href=""><img class="miniCircle" src="[[!+post.photo]]"></a>
        </div>
        <div class="post-info floatLeft">
            <span class="in-line"><a href="">[[!+post.owner]]</a></span>
            <span class="in-line"><time class="timeago smallFont" datetime="[[!+post.date]]"></time></span>
        </div>
        <div class="clear"></div>

    </div>
    <div class="post-content">
        <div id="post-content-[[!+post.id]]" class="post-content i-content">[[!+post.content]]</div>
    </div>
    <div class="post-footer">
        [[!+post.links]]
        <span class="ui-icon ui-icon-star" style="display: inline-block" title="Like">&nbsp;</span>
    </div>
</div>

如何消除&#34; TypeError:$(...)。parent(...)。previous不是函数&#34;并获取$('body').on('click', '.ui-icon', function (event) { console.log('content: ' + $(this).parent("div").previous("div").descendant(".i-content").html()); // TypeError: $(...).parent(...).previous is not a function }); 中的内容而不通过ID引用它?

通过ID获取该div的html内容仅适用于第一页加载,然后一旦我的ajax更新内容,即使我完全使用新ID,它也将无法定位,因为DOM已更改。但是我知道如果我使用相对定位,我可以获取html内容,因为我在教程中看到了它,但该教程仅使用post-content-[[!+post.id]]及其<ul>子项来设置单层元素集。

3 个答案:

答案 0 :(得分:2)

应该是.prev([selector]).children([selector]),但这只会向下移动一行。

  

给定一个表示一组DOM元素的jQuery对象,.children()方法允许我们在DOM树中搜索这些元素的子元素,并从匹配元素构造一个新的jQuery对象。 .children()方法与.find()的不同之处在于.children()只沿DOM树向下移动一个级别,而.find()可以遍历多个级别以选择后代元素(孙子等)。另请注意,与大多数jQuery方法一样,.children()不返回文本节点;要获取包括文本和注释节点在内的所有子节点,请使用.contents()。

或者,您可以尝试通过CSS ancestry引用孩子。

Here是文档中的一个很好的参考,你可能会找到一些我没有列出的替代选项。不过, previous()肯定应该是prev()!至于回答这个问题。

这是我很久以前在学习jQuery时所做的实现的参考(我还不是专家,我做的是SuiteScript / Automation / Business Logic):

    $(".title").click(function(){
    var height = $(this).parent().children(".content").children("p").height();
    if($(this).parent().children(".content").height() == 0){
        height = height.toString() + 'px';

        /* Reset styling of all posts */
        $(".title").css("color","black");
        $(".content").css({"height": "0px", "color": "#5a5858"});

        /* Set this post's styling */
        $(this).css('color','white');
        $(this).parent().children(".content").css({'height': height, 'color':'white'});
    /* On unclick */    
    } else {
        $(this).css('color', 'black');
        $(this).parent().children(".content").css({'height': '0px', 'color':'#5a5858'});
    }
    });

答案 1 :(得分:2)

.previous()不存在,既不使用prev()和.descendant(),也可以使用.children()或find()

https://api.jquery.com/prev/

https://api.jquery.com/children/

https://api.jquery.com/find/

,它告诉你不是一个函数,因为它确实不存在,不是因为你编码中的任何错误。

答案 2 :(得分:1)

尝试     console.log('content:'+ $(this).parent()。prev()。children()。html());