这种代码总是有效吗?

时间:2010-01-16 15:49:38

标签: jquery dom

$('#container').append('<div id="theonly">tests</div>').find('#theonly');

$('#container').html('<div id="theonly">tests</div>').find('#theonly');

我担心有时动态生成的元素不可用,我错了吗?

如果我没错,那么解决所有案件的解决方案是什么?

修改 有人能提出一个明确而统一的答案吗?

1 个答案:

答案 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));