最简单的方法是用类属性替换 id 属性。
<div id="chat-outline">
...
</div>
变成
<div class="chat-outline">
...
</div>
并适当地更新你的 CSS。
.chat-outline
{
background-color: gray;
....
}
然后使用文本/模板标签使其可用于 jQuery。
<script type="text/template" id="chat-template">
<div class="chat-outline">
...
</div>
</script>
请注意,由于浏览器会忽略它们无法识别的脚本类型,因此 html 渲染引擎将忽略它,但由于它有一个 id,它对 jQuery 是可见的,并且可以这样访问:
<div id="container">
</div>
<script type="text/javascript">
$(function() {
var chatTemplate = $('#chat-template').html();
$('#container').append(chatTemplate); // First instance
$('#container').append(chatTemplate); // Second instance
$('#container').append(chatTemplate); // Third instance
});
</script>
当然,如果您的代码需要一个 id 属性作为聊天实例的句柄,您可以创建一个函数来创建给定 id 的聊天实例 html。在这种情况下,我将使用下划线来提供随机 ID、模板和迭代函数,但使用另一个库或编写自己的库很容易。
<div id="container">
</div>
<script type="text/template" id="chat-template">
<div class="chat-outline" id="<%= id %>">
...
</div>
</script>
<script type="text/javascript">
var createChatInstance(idstring) {
return _.template($('#chat-template').html(), { id: idstring });
}
$(function() {
var chatTemplate = $('#chat-template').html();
// Create an array of 3 unique ids by which chat instances will be accessed.
var chatIds = [_.uniqueId('chat-outline'),
_.uniqueId('chat-outline'),
_.uniqueId('chat-outline')];
_.each(chatIds, function(chatId) {
$('#container').append(createChatInstance(chatId));
});
// You now have an array of 3 unique ids matching 3 divs.
// You can access individual sub-divs via descendent class matching from the id
// thus: $('#' + chatIds[n] + ' .chat-message').keyup(...code handling event...);
});
</script>
在这一点上,如果你想更进一步的架构,你确实需要考虑研究像backbone.js这样的东西。
希望这可以帮助。