2014-02-15 115 views
0

我的页面上有一个隐藏的div,我只想获取HTML结构。从html()变量中删除所有空格和制表符

<div class="html-to-store visuallyhidden"> 
    <span class="item"> 
     <p>Test</p> 
     <p>Another Test</p> 
    </span> 
    <span class="item"> 
     <p>Second Test</p> 
     <p>Dadada</p> 
    </span> 
</div> 

和我的JavaScript:

var storeThis = $('.html-to-store').html(); 

现在,这是很好的,但我希望能够得到所有的HTML标签一个单行。

这里的what I'm currently getting

<span class="item"> 
    <p>Test</p> 
    <p>Another Test</p> 
</span> 
<span class="item"> 
    <p>Second Test</p> 
    <p>Dadada</p> 
</span> 

我想是这样的:

<span class="item"><p>Test</p><p>Another Test</p></span><span class="item"><p>Second Test</p><p>Dadada</p></span> 

回答

1

微小的jQuery插件用于此目的:

(function($){ 
    $.fn.getUnformattedText = function() { 
     return $.trim($(this).html() 
        .split(/\>[\n\t\s]*\</g).join('><') 
        .split(/[\n\t]*/gm).join('')); 
    } 
})(jQuery); 

用法:

$('.html-to-store').getUnformattedText(); 

小提琴:

http://jsfiddle.net/marionebl/t8zRJ/10/

+0

如果您有多个类名,这并不好。删除文件夹之间的空间 –

+1

已更新,以防止文件类和文本节点。 – marionebl

+0

很酷,谢谢。这是接受答案的一个很好的选择,如果我关心我的代码的外观,我会采取这种方式,但现在我只想让该死的东西起作用!非常感谢帮助。 –

0

的解决方法是删除所有空白文本节点,所以尽量

$(function() { 
    $('.html-to-store').contents().contents().addBack().filter(function() { 
     return this.nodeType == 3 && $.trim(this.nodeValye) == '' 
    }).remove(); 

    var storeThis = $('.html-to-store').html(); 

    $('textarea').val(storeThis); 

}); 

演示:Fiddle

如果你不想修改DOM中的HTML结构,那么使用像克隆in here

+0

这是非常好的,但不幸的是,3级深度的唯一工作。我真的不知道我的内容会在一段时间后变得多深 –

+0

这不是,我在这里测试过:http://jsfiddle.net/LfSzW/3/ –

相关问题