使用JavaScript将innerHTML转换为自定义json

0lvr5msh  于 4个月前  发布在  Java
关注(0)|答案(2)|浏览(94)

这是我从网页上的文本编辑器中获得的innerHTML的一个例子,用户可以在其中编写文本并添加图像,视频和音频。

<p>This is a<br>test</p>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/12345" frameborder="0" allowfullscreen=""></iframe></p>
<p><audio controls><source src="https://www.test.com/123/456/example.mp3"/></audio></p>
<p>end of test</p>

字符串
我保存innerHTML,这样我就可以重新加载用户在编辑器中编写的内容,但我还需要将这些信息格式化为json结构,如下所示:

{
  "page1": {
     contents: [
        {"text":"This is a test"},
        {"video":"https://www.youtube.com/embed/12345"},
        {"audio":"https://www.test.com/123/456/example.mp3"},
        {"text":"end of test"}       
     ]
  }
}


这个json应该被发送到后端并保存,这样一个移动的应用程序就可以要求这些信息并以自定义的方式显示它们。
那么,我如何才能在JavaScript中从innerHTML中获得上述结构呢?

9q78igpj

9q78igpj1#

希望这能给你给予一个基本的概念:
1)您需要为开始文本和结束文本选择不同的键,如start_text和end_text。
2)创建一个虚拟DOM元素,并将你拥有的innerHTML字符串存储在DOM元素的innerHTML中。这将帮助你访问DOM方法,你可以实现你想要的。例如:

var content = '(innerHTML content)';
var d = document.createElement("DIV");
d.innerHTML = content;
var p_tags = d.querySelectorAll("p");

字符串
3)创建您喜欢的对象结构。例如:

var final_content = {};
final_content["page_1"] = {};
final_content["page_1"]["content"] = [];
final_content["page_1"]["content"].push({"start_text":""});


4)最后,您可以使用JSON.stringify(final_content)将对象转换为JSON字符串。

d8tt03nd

d8tt03nd2#

如果格式不变,你可以尝试将innerHTML转换为字符串,然后用</p>分割。这将创建一个4个元素的数组。循环遍历每个元素。对于字符串,从字符串中剥离标签可以很容易地用string.replace("<p>","")完成。对于更复杂的iframeaudio标签,使用这个正则表达式"(https.*?)"。它将返回src url。然后使用这些值创建对象。下面是一些快速的伪代码:

var aHtml = JSON.stringify(element.innerHTML).split('</p>');

var result = [];
aHtml.forEach(function(item, idx, arr){
    // run regex against it, grab matching element
    var match = item.match(/"(https.*?)"/,"g");
    if(match){
        var url = match[1]; // the url
        if(match[0].indexOf('audio')> -1){
            result.push({audio: url});      
        }else{
            result.push({video: url});
        }
        
    }else{
        var str = item.replace(/(<p>|<br>)/g, " ");
        result.push({text: str});
    }
})

console.log(result);

字符串

相关问题