$('#container').append('<div id="theonly">tests</div>').find('#theonly');
和
$('#container').html('<div id="theonly">tests</div>').find('#theonly');
我担心有时动态生成的元素不可用,我错了吗?
如果我没错,那么解决所有案件的解决方案是什么?
修改 有人能提出一个明确而统一的答案吗?
答案 0 :(得分:2)
在DOM世界中,任何以“是”回答这个问题的人都是疯了。
html(val)
函数直接替换innerHTML
,因此理论上此代码应该始终有效,因为#container
实际上在您调用find()
时会有新的html代码}
然而,DOM因在不同浏览器中的表现不同而臭名昭着。所以这里的教训是彻底测试。
修改强>: 回应“你的解决方案是什么?”
正如我上面所说,你应该彻底测试。函数应按预期工作,但如果不测试主要浏览器,你就无法确定。
话虽如此,如果您确实想要确认新HTML已准备好进行查询,您可以设置一个轮询,以便首先根据您要设置的html检查当前html()
。
这样的事情:
(function ($) {
$.fn.htmlX = function (html, callback) {
var element = this;
var poll = function () {
if (element.html() === html) {
callback();
} else {
setTimeout(poll, 100);
}
};
element.html(html);
poll();
};
$('#container').htmlX('<div id="theonly">tests</div>', function() { $('#container').find('#theonly').css('color', '#f00'); });
}(jQuery));