【问题标题】:Javascript how to split plain text html elements into an array?Javascript如何将纯文本html元素拆分为数组?
【发布时间】:2019-01-24 06:03:29
【问题描述】:

如果我有一个包含 html 元素的字符串,那么创建同级 html 元素数组的有效方法是什么?

尝试将 indexOf 与开始标记“

简单示例:

<p>Hello there</p>

<h1>Thank you</h1>

提前致谢!

【问题讨论】:

    标签: javascript html plaintext


    【解决方案1】:

    使用正则表达式和js拆分方法我们可以提取。

    检查我的代码

    let a = `<p>Hello there</p><p>How r you?</p>
    
    <h1>Thank you</h1>`
    let b = a.split(/<[a-zA-Z0-9]*>([^<.*>;]*)<\/[a-zA-Z0-9]*>/gmi).filter(x=>x.trim() !== '')
    console.log(b) //['Hello there', 'How r you?', 'Thank you']
    

    【讨论】:

    • 非常感谢朋友!
    【解决方案2】:

    我相信这就是你想要做的。

      <div id="container">
        <div>child 1</div> 
        <div>child 2</div> 
        <div>child 3</div> 
      </div>
      <script type="text/javascript">
          let elements = [], container = document.getElementById("container");
          for(let i = 0; i < container.children.length; i++){
              elements.push(container.children[i].outerHTML);
          }
          console.log(elements);
    </script>
    

    【讨论】:

    • 谢谢我的朋友,但是html元素是纯文本的,我他们不是dom元素仍然感谢你的努力
    • 啊,现在我明白您所说的“包含 html 元素的字符串”是什么意思了。 :) 很高兴 Arshpreet 的回答似乎对你有用。
    【解决方案3】:

    你可以使用正则表达式来解决这个问题。

    使用正则表达式查找所有开始和结束标记并替换为“/”(其他)然后拆分它,然后使用过滤器(布尔)过滤(“”)

    代码:

    var elements = [],container = document.getElementById("container");
      for(let i = 0; i < container.children.length; i++)    {                     elements.push(container.children[i].outerHTML.replace(/<\/?[^>]+(>|$)/g, ""));
       }
       
          console.log("plainTextArray = ",elements);
    
    
    
    
    let bodyHtml = document.getElementsByTagName('div')["0"].innerHTML;
    
    let plainTextArray = bodyHtml.replace(/<\/?[^>]+(>|$)/g, "//").split("//").filter(Boolean)
    
    console.log('plainTextArray = ',plainTextArray);
    <body>
    <div id="container"><p>Hello there</p><h1>Thank you</h1></div>
    </body>

    【讨论】:

    • 非常感谢,但这些元素是纯文本而不是 dom 元素,但无论如何谢谢
    【解决方案4】:

    您可以像这样使用从子元素中获取所有文本。

    let nodeList = document.getElementById('stack').querySelectorAll('*');
    let list = [];
    nodeList.forEach(function(val){
    	list.push(val.outerHTML)
    })
    console.log(list); 
    <div id="stack">
     <p>Hello there</p>
     <h1>Thank you</h1>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多