Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:HTML字符串中的展开元素_Javascript_Jquery_Memory - Fatal编程技术网

Javascript jQuery:HTML字符串中的展开元素

Javascript jQuery:HTML字符串中的展开元素,javascript,jquery,memory,Javascript,Jquery,Memory,我试图找到最好的方法来打开HTML字符串(比如AJAX响应),而不必先将其附加到文档中。另外,哪一个是内存管理的最佳选择 HTML JavaScript ,将在此处变成code(删除的空白) 展开它的一种通用方法是简单地遍历字符串,无论是最外层的标记还是特定的标记,将不属于标记的每个字符添加到一个新字符串中(一旦遇到,您的实际问题就不太清楚了,但我可以预见两个可能的困难 .html()只返回一组html元素的内部内容,而不是标记本身 .find()只搜索子节点,而不是提供的节点 这两个问

我试图找到最好的方法来打开HTML字符串(比如AJAX响应),而不必先将其附加到文档中。另外,哪一个是内存管理的最佳选择

HTML
JavaScript
  • ,将在此处变成
    code
    (删除的空白)

  • 展开它的一种通用方法是简单地遍历字符串,无论是最外层的标记还是特定的标记,将不属于标记的每个字符添加到一个新字符串中(一旦遇到,您的实际问题就不太清楚了,但我可以预见两个可能的困难

  • .html()
    只返回一组html元素的内部内容,而不是标记本身

  • .find()
    只搜索子节点,而不是提供的节点

  • 这两个问题都可以通过在调用这些方法之前在HTML周围添加额外的标记来解决

    编辑我想你想要的是:

    .filter()
    行作用于顶级元素,而不是它们的子元素


    在调用
    .appendTo()
    方法之前,不会将元素添加到真正的DOM中。

    是否只打开外部标记或特定类型的标记?外部标记,但如果存在类似
    foobarfoobar
    (许多外部标记和任意顺序)的内容,最好能够选择外部标记的类型您只想删除div。最初的问题只是一个外部标记(例如
    ),但我希望更健壮。您在这两个方面都是对的,这就是我在示例中所做的。
    查找('*'))
    将找到所有直接子项,然后打开父级,这是我们想要的。另一方面,使用选择器/上下文方法,这就是为什么我们必须首先
    wrap()
    然后指向它的
    parent()
    html()
    有点像反向展开(我们可以使用它来展开所选元素,而不是展开某个元素的父元素)。我真正希望找到的是类似于
    closest()的东西
    ,但它不会返回一个元素,而是会打开所有元素的数组。本质上,它类似于find,但它会从当前元素及其所有兄弟元素开始。不,我的意思是在整个HTML中包装一个元素-在HTML中最顶端的每个元素周围都有一个
    。看看哪里只有一个元素e
    标记:阿尔尼塔克:是的,但是如果你看我的
    包装的
    示例,你会注意到我在整个HTML中放置了一个
    div
    。@vol7ron当然,但是为什么要把这两个预标记放在第一位呢?你仍然非常不清楚你到底想要什么,以及为什么我发布的版本没有实现这一点。是的,计数方法可以工作,但这意味着我需要一个XHTML正则表达式解析器,我希望避免这样做:)关于内存管理,我只是好奇如果我删除变量(例如
    $find
    ),是否会有任何内存占用,我不确定jQuery是如何释放其内部的。
    <div class="label">Start With:</div>
    <pre id="original"></pre>
    
    <div class="label">What's Wanted:</div>
    <pre id="wanted"><div>foo</div><div>bar</div></pre>
    
    <hr />
    
    <div class="label">Attempt: .find()</div>
    <pre id="find"></pre>
    
    <div class="label">Attempt: .closest()</div>
    <pre id="closest"></pre>
    
    .label    { font       : italic bold 11px Georgia;   margin    : 1em 0 .5em; }
    pre       { border     : 1px solid black;            padding   : 1em;        }
    hr        { margin     : 1.5em 0 1em; }
    
    #original { background : #eee; }
    #wanted   { background : #def; }
    
       var $html= "<pre><div>foo</div></pre><pre><div>bar</div></pre>";
    
       // No Changes
       jQuery('#original').html($html);
    
    
       // Find
       var $find = jQuery($html).find('*').unwrap();
       jQuery('#find').html($find);
    
    
       // Closest
       var $closest = jQuery($html).closest('pre').unwrap().html();
       jQuery('#closest').html($closest);
    
    
       // Wrapped
       var $pre = jQuery('pre', jQuery($html).wrap('<div />').parent() );
       $pre.each(function(){
                    jQuery('#wrapped').append(jQuery(this).html());
                });
    
       //=========== Prettify Output ===========
       var $wanted = jQuery('#wanted').html();
       jQuery('pre').not('#wanted, #original, #original *')
                    .each(function(){
                      var t = jQuery(this);
                      t.css({background: t.html()==$wanted?'#efe':'#fee'});
                    });
    
    jQuery($html).filter('pre').children('div').appendTo('#wanted');