2012-04-12 134 views
0

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

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

我也想出了如何在克隆innerhtml周围放置一个单独的div标签,克隆(true)冗余标签元素,并将冗余标签和它的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> 

回答

0

你可以遍历的孩子,不是附加克隆每一个thisOne

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

你会觉得会有更好的方式来做到这一点,但我得去上最好的。谢谢 – user1032531 2012-04-13 22:03:31

0

你必须让等待选择的将来出现,以及委派事件。

它很容易这样

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

我如何选择innerhtml,而不仅仅是li标签?只需使用html(),还是需要clone()它?本来没有显示它,但有更多,只是在li标签中的一个。谢谢! – user1032531 2012-04-12 16:21:20

+0

@ user1032531,yeah'.html()'会给出所有内部标记 – Starx 2012-04-12 16:28:51

+0

感谢Starx,我尝试使用.html(),它不会触发事件。查看我刚添加到原始帖子中的新代码。谢谢 – user1032531 2012-04-12 17:17:07