如何使用jQuery替换内存中的DOM节点

时间:2011-02-28 17:38:26

标签: jquery dom memory replace

我有以下代码

$.getJSON("../services/getNavigationAffectedList.php", obj, function(response)
{
    $.each(response, function(i, v)
    {
        // Get the old page source
        var source = v;

        // Get the updated preview HTML
        var new_nav = $('#preview').find('#navigation-block').html();

        // Replace the old navigation with the preview HTML
        $(source).find('.navigation-block').html(new_nav);
        var source = $(source).html();

        var obj = {
            page_path: i,
            new_source: source
        };
        console.log(obj);
    });

尝试替换内存(源)中包含的DOM中的导航块类。虽然,$(source).html()不会产生预期的结果。

帮助?

根据David的要求提供部分JSON响应:

  

{ “\ / VAR \ / WWW \ / HTML \ / CMS \ /网站\ /约\ /debbie.php”:“\ r \ n   ...这里有更多的HTML ....}

这是一个小小的测试用: http://jsfiddle.net/eZP9E/1/

1 个答案:

答案 0 :(得分:0)

尝试使用jQuery的replaceWith函数。这是你在找什么?

http://api.jquery.com/replaceWith/

你得到的不理想的结果是什么?

UPDATE:结果问题在于它在jQuery中创建DOM元素的方式。

您的代码期望'var original'是元素,但它不是。

var container = $('<html><body><div class="navigation">1</div></body></html>');
alert(container.length); // returns 1, div.navigation

var container = $('<html><body><div class="navigation">1</div><div class="body"></div></body></html>');
alert(container.length); // returns 2, div.navigation, div.body

var container = $('<div id="root"><html><body><div class="navigation">1</div></body></html></div>');
alert(container.length); // returns 1, sweet! we can use this

经过一些测试,这些是我从上面的代码得到的结果。

您的问题的快速解决方案是将代码更新为:

var original = $('<div id="root">' + v + '</div>', document);