简体   繁体   English

如何通过NodeJS在线性DOM字符串行中添加缩进?

[英]How to add indentations in linear DOM string line via NodeJS?

I've an svg string in fomat like: 我在fomat中有一个svg字符串,如:

    <g id="icons"><g class="cls-1"><path class="cls-2" d="M12,11.43c-2-.45-3.83-.85-2.94-2.54C11.79,3.75,9.79,1,6.92,1S2,3.85,4.77,8.89c.92,1.69-1,2.1-2.94,2.54C.11,11.83,0,12.67,0,14.12v.72H13.83v-.72C13.84,12.67,13.72,11.83,12,11.43Zm2.26-3.94V5.76H12.54V7.49H10.81V9.22h1.73V11h1.73V9.22H16V7.49Z"/></g><path class="cls-3" d="M12,10.43C10,10,8.18,9.58,9.07,7.89,11.79,2.75,9.79,0,6.92,0S2,2.85,4.77,7.89c.92,1.69-1,2.1-2.94,2.54C.11,10.83,0,11.67,0,13.12v.72H13.83v-.72C13.84,11.67,13.72,10.83,12,10.43Zm2.26-3.94V4.76H12.54V6.49H10.81V8.22h1.73V10h1.73V8.22H16V6.49Z"/></g>

I need somehow transform it with beauty indentations inserted between each tag (like in original DOM tree). 我需要以某种方式将它转换为在每个标记之间插入的美容缩进(就像在原始DOM树中一样)。

So, at the end of the process I expect to get next: 所以,在这个过程的最后,我希望得到下一个:

<g id="icons">
<g class="cls-1">
    <path class="cls-2" d="M12,11.43c-2-.45-3.83-.85-2.94-2.54C11.79,3.75,9.79,1,6.92,1S2,3.85,4.77,8.89c.92,1.69-1,2.1-2.94,2.54C.11,11.83,0,12.67,0,14.12v.72H13.83v-.72C13.84,12.67,13.72,11.83,12,11.43Zm2.26-3.94V5.76H12.54V7.49H10.81V9.22h1.73V11h1.73V9.22H16V7.49Z"
    />
</g>
<path class="cls-3" d="M12,10.43C10,10,8.18,9.58,9.07,7.89,11.79,2.75,9.79,0,6.92,0S2,2.85,4.77,7.89c.92,1.69-1,2.1-2.94,2.54C.11,10.83,0,11.67,0,13.12v.72H13.83v-.72C13.84,11.67,13.72,10.83,12,10.43Zm2.26-3.94V4.76H12.54V6.49H10.81V8.22h1.73V10h1.73V8.22H16V6.49Z"
/>

Any ideas about how to make it real or maybe someone knows npm lib for such task? 关于如何使它成为现实的任何想法或者有人知道npm lib是否有这样的任务?

Thanks! 谢谢!

Use below snippet: 使用以下代码段:

It's explained in the following SO Question: SO 它在以下SO问题中解释: SO

 var str = ' <g id="icons"><g class="cls-1"><path class="cls-2" d="M12,11.43c-2-.45-3.83-.85-2.94-2.54C11.79,3.75,9.79,1,6.92,1S2,3.85,4.77,8.89c.92,1.69-1,2.1-2.94,2.54C.11,11.83,0,12.67,0,14.12v.72H13.83v-.72C13.84,12.67,13.72,11.83,12,11.43Zm2.26-3.94V5.76H12.54V7.49H10.81V9.22h1.73V11h1.73V9.22H16V7.49Z"/></g><path class="cls-3" d="M12,10.43C10,10,8.18,9.58,9.07,7.89,11.79,2.75,9.79,0,6.92,0S2,2.85,4.77,7.89c.92,1.69-1,2.1-2.94,2.54C.11,10.83,0,11.67,0,13.12v.72H13.83v-.72C13.84,11.67,13.72,10.83,12,10.43Zm2.26-3.94V4.76H12.54V6.49H10.81V8.22h1.73V10h1.73V8.22H16V6.49Z"/></g>'; $('#out').text(process(str)); function process(str) { var div = document.createElement('div'); div.innerHTML = str.trim(); return format(div, 0).innerHTML; } function format(node, level) { var indentBefore = new Array(level++ + 1).join(' '), indentAfter = new Array(level - 1).join(' '), textNode; for (var i = 0; i < node.children.length; i++) { textNode = document.createTextNode('\\n' + indentBefore); node.insertBefore(textNode, node.children[i]); format(node.children[i], level); if (node.lastElementChild == node.children[i]) { textNode = document.createTextNode('\\n' + indentAfter); node.appendChild(textNode); } } return node; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <pre id="out"></pre> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM