jQuery 未触发动态生成的内容

jQuery not firing on dynamically generated content

我得到了一个包含 "expand" 的文章列表。我正在使用以下代码启动扩展:

var collapsedSize = '50px';
$('.page-press .article-text-wrapper').each(function() {
    console.log("yes");
    var _this = $(this);
    var _thisLink = $(this).find(".article-icon-showmore");
    var h = this.scrollHeight;
    _thisLink.on('click', function(e) {
        e.preventDefault();

        if($(this).hasClass("showless")) {
            _this.find(".article-text").css('height', collapsedSize);
            $(this).text("mehr anzeigen").removeClass("showless");
        } else {
            _this.find(".article-text").css('height', h);
            $(this).text("weniger anzeigen").addClass("showless");
        }   
    });
});  

但我正在通过 ajax 调用加载文章列表的更多内容并填写 html 模板并将其附加到父 div。

以上代码不适用于新生成的内容。为什么?

您遇到的问题是您仅将点击事件绑定到页面加载时 DOM 中的元素。如果您改为将点击事件绑定到文档并提供一个选择器,它也适用于 JavaScript 运行后添加的元素。

我认为它应该是这样工作的:

    var collapsedSize = '50px';
    $(document).on('click', '.page-press .article-text-wrapper .article-icon-showmore', function(e) {
        e.preventDefault();
        var $articleTextWrapper = $(this).parents('.article-text-wrapper');
        if ($(this).hasClass("showless")) {
            $articleTextWrapper.find(".article-text").css('height', collapsedSize);
            $(this).text("mehr anzeigen").removeClass("showless");
        } else {
            $articleTextWrapper.find(".article-text").css('height', $articleTextWrapper[0].scrollHeight);
            $(this).text("weniger anzeigen").addClass("showless");
        }
    });

没有 HTML 我无法测试这个 JavaScript,但是将点击事件绑定到文档的概念应该可行。