可以在文档外的元素上使用jQuery吗?

时间:2011-11-14 12:41:34

标签: javascript jquery dom

使用一些遗留架构,并且由于初始化序列的性质,我需要在将元素添加到文档之前将其包装起来。说我有以下内容:

<div id="containerX">
   <div id="myNode"></div>
</div>

我需要在添加到DOM之前包装“myNode”。 jQuery选择器甚至可以在这种情况下工作吗?如果是这样,我怎么能做到这一点?我试过像这样传递元素:

(纠正了下面某些答案中提到的一些拼写错误):

$(this.element).wrap('<div id="'+ "myWrapper_" + this.id + '"></div>');
没有运气。我假设选择器的通常语法不起作用,因为节点在文档之外。我发现的最接近的是这篇文章:Manipulate DOM elements before adding them to the document但我的情况和他的情况之间的区别是我没有字符串,我有使用document.createElement创建的元素没有被附加。

任何人都可以指出我正确的方向,或者这是否可能?

由于

3 个答案:

答案 0 :(得分:4)

您也可以在其他元素上使用Jquery,并且我不止一次使用它来解析来自AJAX请求的响应。

虽然我不确定您的确切请求是否可行,但我认为您的代码中的主要问题是在您尝试包围元素之前缺少<

答案 1 :(得分:2)

jQuery允许您处理尚未添加到文档中的元素。它们可以是简单的HTML字符串以及使用createElement()构建的元素。

让我举个简单的例子:

var container=document.createElement('div');
container.id='containerX';
var mynode=document.createElement('div');
mynode.id='myNode';
container.appendChild(mynode);

$(container).find('#myNode').wrap('<div id="myWrapper'+mynode.id+'">');

这应该会产生你想要的结构。您只需应用变量名称即可。我是这样做的,因为我不确定你的this.element包含了什么。

请查看jsFiddle Demo

答案 2 :(得分:0)

首先,您的代码中存在错误。你错过了一个“+”。试试这个:

$(this.element).wrap('div id="' + myWrapper + this.id + '"></div>');

注意“myWrapper”之前的“+”。

但是我认为你是对的,你不能在DOM之外的元素上使用wrap。您始终可以将其添加到DOM中,然后将其包装起来。如果你不想在DOM中使用它,那么调用remove来取回它;当然,这将意味着删除其父级,而不是原始元素本身。没有尝试过所有这些,但它应该工作。您需要父(包装器)具有唯一ID,以便您可以确保获取它。另外一件事,看起来您希望父级具有与您要包装的元素相同的ID。您应该避免为两个元素分配相同的ID。因此,如果父获取id,则应该从元素中删除它。