2010-07-30 43 views
2

在document.ready中,我将选择器存储在一个变量中(我假设它已经计算过,将元素对象存储在变量中),因为我需要多次操作它。在删除和随后的重新插入后保留对元素的引用

即。 myVar = $('#mySpan');

我正在存储的是div内的span元素。其中一个操作需要我使用.html()函数覆盖div的内容。

之后,我需要在上面提到的div中重新插入span元素,并使用html()函数来完成。

我的问题是,一旦span元素被重新添加,变量myVar不再与span元素相关联。我认为这是因为它已从DOM中删除,然后重新添加。我知道jquery的.detach()函数,但似乎只保留附加的事件和数据元素,但不是实际的引用。我甚至没有.live()函数在这种情况下也会有所帮助。

回答

1

编辑:

如果您想保留供以后插入变量的内容,只是简单的将其存储在使用.contents()一个变量,需要的时候再重新插入。

jQuery的.contents()方法选择所有内容,包括文本节点。

试试看:http://jsfiddle.net/bD2Ej/2/(单击该文本进行切换)

这个例子原始和新内容之间进行切换。

var myVar; 

// Add the new content, and append the element stored in myVar 
$('#somediv').toggle(function() { 
    myVar = $(this).contents(); 
    $(this).html('some new content<br>'); 
}, function() { 
    $(this).html(myVar); 
}); 
​ 

原始ansewr:

如果使用.detach()你仍然需要将其存储在一个变量。

下面是一个例子:http://jsfiddle.net/bD2Ej/

// Detach and reference the element in a variable 
myVar = $('#mySpan').detach(); 

    // Add the new content, and append the element stored in myVar 
$('#somediv').html('somecontent').append(myVar); 

但你确定你需要.html()?您能否使用.append(),因此#mySpan首先不会被覆盖?

+0

如果跨度元素具有一定的纯文本之间重新插入,会发生什么? 这就是我使用的原因。html() – Brownbay 2010-07-30 16:30:29

+0

@genbayer - 我需要看你的具体情况。新的'.html()'内容是纯文本的一部分吗?还是存在,还需要保存? – user113716 2010-07-30 16:32:23

+0

基本上,这是我需要做的 原创内容: [DIV]原创内容文本[跨度]和一些文字[/ DIV] 然后,我需要覆盖在上面的DIV内容: [ div]新内容[/ div] 最后,我需要用div中的内容替换原来的内容。所以,再次: [div]原始内容文本[跨度]和一些更多的文字[/ div] – Brownbay 2010-07-30 16:37:59