听起来很奇怪我的代码就是这样:
$element = "<div>Testing</div>";
_.each($('.chat-messages'), function(el) {
el.append($element);
debugger;
});
如果我从debugger
进行检查,当我在控制台中输入el
时,我可以清楚地看到$element.el
已成功附加。但是,当我单击“继续”时,该元素从未添加。
$('.chat-messages')
选择器返回两个对象。第二个是$element.el
添加就好了。第一个没有。即使第一个肯定会返回与第二个相同类型的对象。在调试器中,我可以清楚地看到该对象已附加到el
。它永远不会添加到实际的HTML中。只是调试器中的表示对象。
我是不是没有正确选择el
?第一个和第二个怎么可能不同?
答案 0 :(得分:1)
timeout
,因为div在此之前不会呈现"<div>Testing</div>"
var f = function() {
$element = "<div>Testing</div>";
_.each($('.chat-messages'), function(el) {
el.append($element);
//debugger;
});
};
setTimeout(f, 100);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='chat-messages'>
<div class='chat-messages'>
<div class='chat-messages'>
<div class='chat-messages'>
编辑:
$element
与实际的$("<div>Testing</div>")
进行交换,只会发现评论会发生什么是真的注1:
- $.each
不是必需的,因为您可以选择与结果匹配的所有元素并立即追加
var f = function() {
$element = $("<div>Testing</div>");
$('.chat-messages').append($element);
};
setTimeout(f, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='chat-messages'></div>
<div class='chat-messages'></div>
<div class='chat-messages'></div>
<div class='chat-messages'></div>
现在让我们使用$.each
var f = function() {
$element = $("<div>Testing</div>");
$('.chat-messages').each(function(ix, el) {
$(el).append($element);
});
};
setTimeout(f, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='chat-messages'></div>
<div class='chat-messages'></div>
<div class='chat-messages'></div>
<div class='chat-messages'></div>
注2:
您还可以在页面上选择一个元素并将其插入 另一个:
$(“。enctainer”)。append($(“h2”));
如果以这种方式选择的元素插入到单个位置 在DOM的其他地方,它将被移动到目标(未克隆):