Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $(';#id1';).html(";)从DOM中删除#id1的所有子级,还是仍在DOM中?_Javascript_Jquery_Html_Jquery Ui - Fatal编程技术网

Javascript $(';#id1';).html(";)从DOM中删除#id1的所有子级,还是仍在DOM中?

Javascript $(';#id1';).html(";)从DOM中删除#id1的所有子级,还是仍在DOM中?,javascript,jquery,html,jquery-ui,Javascript,Jquery,Html,Jquery Ui,我是这样做的: $("#id1").html(data); 我用html重新填充一个div,但是当我尝试获取这个重新填充div的子对象的html时,我得到了一个空字符串,尽管它有,这就像旧的子对象仍然存在,但没有html一样 编辑: 我试图重现我的问题,这里是html:(在重新填充时单击2次,然后单击打开,您将看到什么都不会发生) $(函数(){ $(“#r1”)。单击(函数(){ var x=$(“#main”).html(); $(“#main”).html(x); }); }); $(

我是这样做的:

$("#id1").html(data);
我用html重新填充一个div,但是当我尝试获取这个重新填充div的子对象的html时,我得到了一个空字符串,尽管它有,这就像旧的子对象仍然存在,但没有html一样

编辑: 我试图重现我的问题,这里是html:(在重新填充时单击2次,然后单击打开,您将看到什么都不会发生)


$(函数(){
$(“#r1”)。单击(函数(){
var x=$(“#main”).html();
$(“#main”).html(x);
});
});
$(函数(){
$(“#a1”)。单击(函数(){$(“#forDialog”).dialog();});
$(“#a2”)。单击(函数(){$(“#forDialog”)。对话框('close');});
});
你好

我正在动态生成此javascript,以便注册a1.click和a2.click的脚本需要位于主div中

在使用
.html(stuff)
重置其内容后,元素下的旧子DOM将消失。它可能存在于内存中的某个地方,但它与DOM分离,您无法获取它。

在您使用
.html(stuff)
重置其内容后,元素下的旧子DOM将消失。它可能存在于内存中的某个地方,但它与DOM分离,您无法获取它。

我不太确定您的代码的确切目标,但我可以提出3个一般性建议:

  • 使用附加到一次性和将来的元素
  • 您可以为您选择HTML对话框
  • 使用链接的单击处理程序中的单击链接时,可以防止页面刷新
  • 将这些建议应用于您的代码将产生以下工作代码:

    <script type="text/javascript">
    
        $("body").delegate("#a1", "click", function(){
            $("#forDialog").dialog();
        });
    
        $("body").delegate("#a2", "click", function(){
            $("#forDialog").dialog('close');
        });
    
        $(function(){
              // Hide HTML for the dialog.
            $("#forDialog").hide();
    
            $("#r1").click(function(event){
                var x = $("#main").html();
                $("#main").html(x);
                  // If you don't want the page to refresh by clicking
                  //   on this A element, use the following:
                event.preventDefault();
            });
        });
    
    </script>
    <a href="#" id="r1">refill</a>
    
    <div id="main">
        <a id="a1" href="#" >open</a>
        <div id="forDialog">
            hi
            <a id="a2" href="#" >close</a>
        </div>
    </div>
    
    
    $(“body”).delegate(“#a1”,“单击”,函数(){
    $(“#forDialog”).dialog();
    });
    $(“body”).delegate(“#a2”,“单击”,函数(){
    $(“#forDialog”).dialog('close');
    });
    $(函数(){
    //隐藏对话框的HTML。
    $(“#forDialog”).hide();
    $(“#r1”)。单击(函数(事件){
    var x=$(“#main”).html();
    $(“#main”).html(x);
    //如果您不想通过单击刷新页面
    //在该元素上,使用以下命令:
    event.preventDefault();
    });
    });
    你好
    

    我不太确定您的代码的确切目标,但我可以提出3个一般性建议:

  • 使用附加到一次性和将来的元素
  • 您可以为您选择HTML对话框
  • 使用链接的单击处理程序中的单击链接时,可以防止页面刷新
  • 将这些建议应用于您的代码将产生以下工作代码:

    <script type="text/javascript">
    
        $("body").delegate("#a1", "click", function(){
            $("#forDialog").dialog();
        });
    
        $("body").delegate("#a2", "click", function(){
            $("#forDialog").dialog('close');
        });
    
        $(function(){
              // Hide HTML for the dialog.
            $("#forDialog").hide();
    
            $("#r1").click(function(event){
                var x = $("#main").html();
                $("#main").html(x);
                  // If you don't want the page to refresh by clicking
                  //   on this A element, use the following:
                event.preventDefault();
            });
        });
    
    </script>
    <a href="#" id="r1">refill</a>
    
    <div id="main">
        <a id="a1" href="#" >open</a>
        <div id="forDialog">
            hi
            <a id="a2" href="#" >close</a>
        </div>
    </div>
    
    
    $(“body”).delegate(“#a1”,“单击”,函数(){
    $(“#forDialog”).dialog();
    });
    $(“body”).delegate(“#a2”,“单击”,函数(){
    $(“#forDialog”).dialog('close');
    });
    $(函数(){
    //隐藏对话框的HTML。
    $(“#forDialog”).hide();
    $(“#r1”)。单击(函数(事件){
    var x=$(“#main”).html();
    $(“#main”).html(x);
    //如果您不想通过单击刷新页面
    //在该元素上,使用以下命令:
    event.preventDefault();
    });
    });
    你好
    

    你的问题是什么?您可以发布数据的内容吗?请小心使用.html()替换div内容。您应该首先执行.empty()来删除该div中节点的所有处理程序和数据。@Patricia jQuery在调用html()时在内部调用empty()?很高兴知道。我可以发誓我在某个地方读到了它没有。蒂姆我的问题是如何避免这个问题,或者如何从DOM中完全删除元素,这样你就可以添加具有相同ID的via.html新内容,所有内容都会像在新页面上一样。你的问题是什么?您可以发布数据的内容吗?请小心使用.html()替换div内容。您应该首先执行.empty()来删除该div中节点的所有处理程序和数据。@Patricia jQuery在调用html()时在内部调用empty()?很高兴知道。我可以发誓我在某个地方读到了它没有。蒂姆我的问题是如何避免这个问题,或者如何从DOM中完全删除元素,这样你就可以添加具有相同ID的via.html新内容,所有内容都会像在新页面上一样。我想旧的子DOM仍然可用(如果您在重新填充元素之前创建了对它的引用)。它已从文档树中删除,但仍然是一个节点/文档片段(或jquery对象)。好吧,我想是这样的-但是问题有点模糊,所以我不知道这是否是问题的真正核心。@Pointy好吧,我的问题是我正在尝试对话('close')在.html(数据)的内容中有一个div,但它没有关闭,因为它试图关闭一个不再存在的div;它们有相同的id,当然,在我用几乎相同的内容$('#childdiv').dialog('close')替换html之后,有一个在那里不关闭新的div,因为它正在寻找旧的div…我想是的,这是正确的。在这种情况下,我通常对对话框所做的是让对话框引用一个容器,然后让可加载的内容进入容器中的某个子容器中。这样,实际的对话框元素即使在呃,它的内容可能会一次又一次地改变。你想用这些代码实现什么?坦率地说,这很奇怪。你为什么不解释一下你的目标是什么。我认为旧的子DOM仍然可用(如果你在重新填充元素之前创建对它的引用)。它从文档树中删除,但仍然是一个节点/