javascript - jQuery:是否有任何理由不将 DOM 元素存储在变量中而不是将它们附加到 DOM?

标签 javascript jquery closures

我正在开发一个插件,它可以获取远程页面的一部分,并保存该部分以便在 jQuery UI 对话框小部件中使用;最初我将 HTML 附加到 DOM 并用 display:none 隐藏它,直到用 $.dialog 调用它,但我意识到我可以将 DOM 节点留在多变的。

有什么理由不这样做吗?这是一个例子:

function makeDialogLink() {

    var HTML = $("<div />").load('file.html #container', function() {

        $('a#test').bind('click', function(e) {
            e.preventDefault();
            showDialog();
        }); 
    });

    function showDialog() {
        $(HTML).dialog({
            autoOpen : true,
            width  : opts.width,
            modal  : opts.modal,
            resizable : opts.resizeable,
            title  : opts.title
        });

        // some other stuff happens in here, and a setTimout
        closeDialog();
    }
    function closeDialog() {
        $(HTML).dialog('close');
    }
}

我已经将我实际所做的事情简化了很多,但这很好地概括了我的问题。

正如你所看到的,我已经加载了远程文档的一部分,我将其弹出一个对话框,然后关闭该对话框,但我从来没有直接将获取的 HTML 附加到 DOM ($.dialog 当然,在某个时候会这样做)。

有什么理由不这样做吗?看起来比将 HTML 放入隐藏的 DIV 中然后稍后再获取要好得多。我只是想知道以这种方式在 javascript 中使用闭包是否存在一些我不知道的陷阱。

最佳答案

我想不出这有什么严重的缺点。它可能会慢一点,因为每次您需要对话框时它都会将其重新附加到 DOM,但这并不重要,因为 1) 差异甚至不会明显,除非您弹出数百个对话框 2) 它如果有的话,可能不会比切换 div 慢多少。

这似乎是最好、最干净的解决方案。如果我处于你的位置,我会保留它。

关于javascript - jQuery:是否有任何理由不将 DOM 元素存储在变量中而不是将它们附加到 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670202/

相关文章:

c# - ASP.NET MVC & JsonResult & jQuery 返回编码结果...为什么?

javascript - Foreach 数据未通过 Knockout Js Object Observable 反射(reflect)到 UI

javascript - 如何使用backbone.js从javascript闭包内部调用其他内部方法?

javascript - 按下按钮时 ng-click 不起作用

javascript - 如何使用 jquery 将多行文本设置为字段

javascript - 加载另一个 html 页面而不更改 URL

带有旋转器的 jQuery SerialScroll 标签

javascript - javascript 闭包中的环境范围

javascript - JavaScript 中可以编写连续的嵌套函数吗?

javascript - 如何使用 find() 函数通过数据属性查找元素?