0

我想用 clone1 或 clone2 替换 thisOne 的 innerhtml。

我已经想出了如何用克隆的元素替换整个 thisOne 元素,但我宁愿不这样做,因为我将数据存储在 li 元素中。

我还想出了如何在克隆 innerhtml、clone(true) 那个冗余标签元素周围放置一个单独的 div 标签,并将冗余标签及其 innerhtml 附加到 thisOne 中,但这些似乎是对标签的浪费。

我还发现 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");});

添加的以下新代码似乎不起作用。

<!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>
4

2 回答 2

0

您可以迭代子代,而不是将克隆的每个附加到thisOne

   $("#clone1, #clone2").each(function() {
        $(this).children().each(function() {
                $("#thisOne").append($(this).clone(true));
        });
    });
于 2012-04-12T16:04:08.463 回答
0

您必须委托该事件,以便它也等待选择器的未来出现。

像这样很容易

$("#clone1 a").on("click", function(){alert("hi");});
于 2012-04-12T16:08:55.997 回答