Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 将innerhtml与事件一起替换_Javascript_Jquery - Fatal编程技术网

Javascript 将innerhtml与事件一起替换

Javascript 将innerhtml与事件一起替换,javascript,jquery,Javascript,Jquery,我想用clone1或clone2的innerhtml替换此版本的innerhtml 我已经想出了如何用克隆的元素替换整个thisOne元素,但由于我将数据存储在li元素中,因此我不希望这样做 我还发现了如何在克隆innerhtml周围放置一个单独的div标记,克隆(true)那个冗余标记元素,并将冗余标记及其innerhtml附加到这个元素中,但这看起来像是浪费标记 我还发现html()不会带来这些事件,并且不希望每次交换html时都重新声明它们 有什么建议吗?多谢各位 <ul> &

我想用clone1或clone2的innerhtml替换此版本的innerhtml

我已经想出了如何用克隆的元素替换整个thisOne元素,但由于我将数据存储在li元素中,因此我不希望这样做

我还发现了如何在克隆innerhtml周围放置一个单独的div标记,克隆(true)那个冗余标记元素,并将冗余标记及其innerhtml附加到这个元素中,但这看起来像是浪费标记

我还发现html()不会带来这些事件,并且不希望每次交换html时都重新声明它们

有什么建议吗?多谢各位

<ul>
<li id="thisOne" data-attr="whatever"></li>
</ul>

<ul style="display: none">
<li id="clone1">
<a href="#" class="doSomething1">Click</a>
<button class="doSomething3">Click</button>
</li>
<li id="clone2">
<a href="#" class="doSomething2">Click</a>
<button class="doSomething4">Click</button>
</li>
</ul>

....

$("clone1 a").click(function(){alert("hi");});
  • 点击
  • 点击
.... $(“克隆1 a”)。单击(函数(){alert(“hi”);});
下面添加的新代码似乎不起作用

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Dialogs</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" language="javascript"></script>
<script type="text/javascript">
$(document).ready(function(){    
    $("#cloneIt").click(function(){$('#newLocation').html($('#clone').html());});
    $("#clone a").on("click", function(){alert("click");});
    $("#clone select").on("change", function(){alert("change");});

});
</script>

</head>
<body>
<input type="button" value="Clone it" id="cloneIt" />

<div id="newLocation"></div>

<div id="clone" style="display: none">
<a href="#">Click Me</a>
<select><option>Hello</option><option>Goodby</option></select>
</div>

</body>
</html>

对话
$(文档).ready(函数(){
$(“#cloneIt”)。单击(function(){$('#newLocation').html($('#clone').html());});
$(“#克隆a”)。在(“单击”,函数(){alert(“单击”)});
$(“#克隆选择”).on(“更改”,function(){alert(“更改”);});
});
海洛戈比

您可以迭代子项,然后将克隆的每个子项附加到
此子项

   $("#clone1, #clone2").each(function() {
        $(this).children().each(function() {
                $("#thisOne").append($(this).clone(true));
        });
    });

您必须委派事件,以便它也等待选择器的将来出现

像这样很容易

$("#clone1 a").on("click", function(){alert("hi");});

如何选择innerhtml,而不仅仅是li标记?只使用html(),还是需要克隆它?最初没有显示它,但有更多,只有一个在李标签。谢谢@user1032531,是的
.html()
将提供所有内部标记。我尝试使用.html(),但它不会触发事件。请参阅我刚刚添加到原始帖子中的新代码。谢谢你你会认为有更好的方法来做这件事,但这是我最好的选择。谢谢