【问题标题】:jQuery nested .parent() method not working on dynamic element, even with .delegate()jQuery 嵌套的 .parent() 方法不适用于动态元素,即使使用 .delegate()
【发布时间】:2020-09-23 00:56:15
【问题描述】:

这是我的 HTML:

<div id="lessons_append_to">
    <div id="lesson_container">
        <div>
        ...
        <div id="delete_conatiner">
        <a href="javascript:void(0);" class="delete">Delete</a>
        </div>
        </div>
    </div>
    <div id="lesson_container">
        Same as first one
    </div>
    <div id="lesson_container">
        Same as first one
    </div>
</div>

所有lesson_container都是动态生成的。

这是我的 JavaScript:

jQuery(document).delegate('.delete', 'click', function(){
    if (!confirm("Do you really want to delete the lesson?")){
     return false;
    } else {
     var select = jQuery(this).parent().parent().parent(); //It works and gets a #lesson_container
     console.log(select); //Returns selected object
     var selected = jQuery(this).parent().parent().parent().parent();//This doesn't work and #lesson_append_to can't be selected
     console.log(selected); //Returns undefined
    }
 });

你能帮我一个线索吗?或者告诉我我在这里做错了什么。

【问题讨论】:

  • .delegate() 自 3.0 版起已贬值。使用.on()。详情here
  • 你用的是什么jquery版本?
  • 考虑使用最接近('selector')来选择父级
  • id 应该是唯一的,你不能有三次 dame id。
  • 您确定您的课程容器是动态添加到您认为的位置的吗?

标签: javascript jquery dom dom-manipulation


【解决方案1】:

由于您使用的是JQuery,我建议使用.closest() 函数

你的 JavaScript 应该是这样的:

jQuery(document).on('click', '.delete', function(){
    if (!confirm("Do you really want to delete the lesson?")){
     return false;
    } else {
     var select = jQuery(this).closest( "#lesson_container" ); 
     console.log(select); 
     var selected = jQuery(this).closest( "#lesson_append_to" );
     console.log(selected);
    }
 });

【讨论】:

  • 仍然 closest() on #lesson_append_to 返回未定义。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多