【问题标题】:Subdivide a HTML node into several nodes with javascript用javascript将一个HTML节点细分为几个节点
【发布时间】:2016-12-01 04:42:30
【问题描述】:

在 Javascript 中,我可以使用以下 HTML 代码 (.innerHTML) 访问 HTML-DOM 节点:

Some Text <b class="first">some other text</b> <a href="link">even more  text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br>
Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br>
Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br>
Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br>
Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br>
Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br>
<script>
    ...
</script>
    <script type="text/javascript">
   ...
    </script>

<script type="text/javascript">
 ...

</script>

重要提示:每个文本行都以换行符 &lt;br&gt; 结束。

我想将每个文本行包含在 &lt;span class="myclass"&gt;&lt;/span&gt; 中,这样我就可以访问每一行,即将大节点细分为几个较小的节点。 Javascript 或 jquery 中是否有方法可以做到这一点? 输出应该是:

<span class="myclass">Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br></span>
<span class="myclass">Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br></span>
<span class="myclass">Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br></span>
<span class="myclass">Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br></span>
<span class="myclass">Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br></span>
<span class="myclass">Some Text <b class="first">some other text</b> <a href="link">even more text</a> text <b><span class="second">text text</span></b> and <span class="third">more text</span>text<br></span>
<script>
    ...
</script>
    <script type="text/javascript">
   ...
    </script>

<script type="text/javascript">
 ...

</script>

【问题讨论】:

    标签: javascript jquery html dom dom-manipulation


    【解决方案1】:
    // I assume you can have your content here
    var div = document.getElementById('divWithContent');
    // filter out script nodes
    var tmp = document.createElement('div');
    for (var i=0;i<div.childNodes.length;i++) {
      var item = div.childNodes.item(i);
      if (!(item.nodeType === 1 && item.nodeName === 'SCRIPT')) {
        var tmp2 = item.cloneNode();
        tmp2.innerHTML = item.innerHTML;
        tmp.appendChild(tmp2);
      }
    }
    // split by <br> and wrap in <span>
    var lines = tmp.innerHTML.split('<br>').filter(function(x){
      return x && x.trim() != ''
    });
    tmp.innerHTML = lines.map(function(x){
      return '<span class="myWrap">' + x + '<br></span>'
    }).join('\n');
    console.log(tmp.innerHTML);
    // if you're happy with result you can place it where you want
    div.innerHTML = tmp.innerHTML;
    

    【讨论】:

    • 哦,是的,非常感谢,我更接近所需的输出,但您的方法消除了一些文本。我得到:&lt;span class="myWrap"&gt;Some Text &lt;b class="first"&gt;&lt;/b&gt; &lt;a href="link"&gt;&lt;/a&gt; text &lt;b&gt;&lt;/b&gt; and &lt;span class="third"&gt;&lt;/span&gt;text&lt;br&gt;&lt;/span&gt; 而不是 &lt;span class="myWrap"&gt;Some Text &lt;b class="first"&gt;some other text&lt;/b&gt; &lt;a href="link"&gt;even more text&lt;/a&gt; text &lt;b&gt;&lt;span class="second"&gt;text text&lt;/span&gt;&lt;/b&gt; and &lt;span class="third"&gt;more text&lt;/span&gt;text&lt;br&gt;&lt;/span&gt;
    • 我发现了错误。 item.cloneNode() 不会克隆某些节点的 innerHTML。它适用于:var tmp2 = item.cloneNode(); tmp2.innerHTML = item.innerHTML; tmp.appendChild(tmp2);
    • 好!不确定浏览器之间的可移植性,但应该可以正常工作
    猜你喜欢
    • 2019-12-03
    • 2019-09-19
    • 2015-03-21
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2012-06-30
    • 2019-07-13
    相关资源
    最近更新 更多