关于插入DOM的Javascript对象的澄清?

3
我正在进行一个涉及jQuery /本地Javascript编程的个人项目。希望有人能够澄清我在代码中遇到的问题。我对JavaScript中创建的对象和DOM中的对象之间的关系感到困惑。
当使用JQuery UI(选项卡功能)时,我的程序的行为取决于我是直接从Javascript目录操作我的对象还是首先从DOM API访问它,这使我相信这两个引用不相等。
例如:
myObject = $(document.createElement("div")).attr("id", "tabs");
$("body").append(myObject);

现在,我发现以下示例可以正常工作:

$("#tabs").tabs();

但是以下内容不行:
$(myObject).tabs();

我是否正确地认为,通过$("#tabs")检索到的对象与我在Javascript中手动创建的对象(myObject)不同或工作方式不同?

一旦将对象插入DOM中,是否会调用某些机制?我是否应该在将其插入DOM后不再进行处理,而是通过其id字段重新检索它?


由于您已经拥有了一个jQuery对象,因此无需编写$(myObject).tabs(),正如cletus已经指出的那样;正确的方法是执行myobject.tabs() - apaderno
1个回答

5
使用原始JS方法来创建元素与使用jQuery引用的任何元素没有什么不同,只是通过像$(...)这样的表达式找到的元素会被包装在jquery对象中。
因为你正在这样做:
myObject = $(document.createElement("div")).attr("id", "tabs");

您已经拥有了一个jQuery对象,因此您应该能够执行以下操作:
myObject.tabs();

通过执行以下操作:

$(myObject).tags();

您实际上正在做的是:

$($(document.createElement(...)...);

我不确定其预期行为是什么。

另外请注意,您可以这样做(并且应该优先考虑这种方式):

var myObject = $("<div></div>").attr("id", "tabs");

var使其在范围内本地化(这是您95%的时间所需的),并且您可以使用jquery创建任意标记,而无需使用原始JS方法。


+1 对于 var 和简化元素创建。不明白为什么会被踩。 - Justin Johnson
很酷,谢谢建议。我喜欢$("<div></div>")的方法。这样做有效吗?$("<div id='someID' class='someClass'></div>") - D.C.
@darren:是的,它是有效的,但在非平凡情况下(依我之见)不建议使用,因为如果你包含动态文本,它可能无法正确转义等,而attr()方法(等等)将正确转义内容并确保HTML有效。 - cletus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接