jquery - 这种代码总是有效吗?

标签 jquery dom

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

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

我担心有时动态生成的元素无法立即可用,我是否错了?

如果我没记错的话,覆盖所有情况的解决方案是什么?

编辑 有人能给出一个明确统一的答案吗?

最佳答案

在 DOM 的世界里,任何用"is"回答这个问题的人都是疯子。

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

关于jquery - 这种代码总是有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077927/

相关文章:

Javascript:声明函数的最佳实用方法

jquery - 是否可以像 selenium 一样在 casperjs 和 phantomjs 中模拟拖放?

javascript - 使用 DOM 将 SVG 元素添加到现有 SVG

javascript - 如何只在启用 JS 的情况下编写 HTML 代码?

jquery - IE9 中的 Ajax 调用随机失败

javascript - 从后端获取 C# const 并在 JS 文件中使用它?

javascript - jQuery 类名可以包含任意数字

javascript - 用户定义的 javascript 对象的方法(原型(prototype))可以使用 document.createElement 吗?

javascript - 在句子中找到一个定义长度的数字并解析它

javascript - 在 ng-repeat 指令中访问 DOM