简体   繁体   English

Javascript HTML字符串 - 注入文档

[英]Javascript HTML string - inject into document

This is the HTML I have: 这是我的HTML:

 <ul id="myUL">
</ul>

This is what I'm doing: 这就是我正在做的事情:

var myString = "    &lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Something Else&lt;/li&gt;"

var div = document.createElement('div');
div.innerHTML = myString;
$("#myUL").append(div.innerHTML);

This is what I recieve: 这是我收到的:

<ul id="myUL" >
   &lt;li&gt;&lt;a href="www.google.com"&gt;Google&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Something Else&lt;/li&gt;
</ul>

This is what I want to recieve: 这是我想要接受的:

<ul id="myUL">
   <li>
    <a href="www.google.com">Google</a>
  </li>    
  <li>
    Something Else
  </li> 
</ul>

Any advices? 有什么建议吗?

Firstly note that you can't append a div to a ul as it's invalid HTML. 首先请注意,您不能将div附加到ul因为它是无效的HTML。 ul can only contain li as children. ul只能包含li作为孩子。

The issue itself is because your string contains escaped HTML. 问题本身是因为您的字符串包含转义的HTML。 You can either use a plain string: 您可以使用纯字符串:

 var myString = '<li><a href="http://www.google.comp">Google</a></li><li>Something Else</li>'; $("#myUL").append(myString); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="myUL"></ul> 

Or you can unescape the string: 或者你可以解开字符串:

 var myString = "&lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Something Else&lt;/li&gt;" $("#myUL").append(htmlDecode(myString)); function htmlDecode(input){ var e = document.createElement('div'); e.innerHTML = input; return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="myUL"></ul> 

See this question for more information on the htmlDecode() function. 有关htmlDecode()函数的更多信息,请参阅此问题

You could also parse your escaped string through DOM Parser: 您还可以通过DOM Parser解析转义的字符串:

function unescapeHTML(input)
{
  var doc = new DOMParser().parseFromString(input, "text/html");
  return doc.documentElement.textContent;
}

in conjunction with your code... 与你的代码一起......

var myString = "    &lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Something Else&lt;/li&gt;"

var div = document.createElement('div');
div.innerHTML = unescapeHTML(myString);
$("#myUL").append(div.innerHTML);

Which should work. 哪个应该有效。

You can also let jQuery decode it for you. 你也可以让jQuery为你解码它。 Adding the encoded string with .html() will force jQuery to decode it. 使用.html()添加编码字符串将强制jQuery对其进行解码。 Then you can get the decoded result with .text() . 然后,您可以使用.text()获得解码结果。

 var myString = "&lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Something Else&lt;/li&gt;" $("#myUL").html($("<div/>").html(myString).text()); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="myUL"></ul> 

You can create a simple function that decodes the data - then assign that value to your ul list 您可以创建一个解码数据的简单函数 - 然后将该值分配给ul列表

function decodeEncodedHtmlString(input){
  var e = document.createElement('div');
  e.innerHTML = input;
  return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}

var myString = "    &lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Something Else&lt;/li&gt;"

document.getElementById('myUL').innerHTML = decodeEncodedHtmlString(myString);

DEMO DEMO

call unescape function to unescape your string 调用unescape函数来取消你的字符串

 var myString = "&lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Something Else&lt;/li&gt;" var div = document.createElement('div'); div.innerHTML = unescape(myString); $("#myUL").append(div.innerHTML); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="myUL"> </ul> 

Decode the string first: 首先解码字符串:

 var myString = " &lt;li&gt;&lt;a href=&quot;www.google.comp&quot;&gt;Google&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Something Else&lt;/li&gt;" var div = document.createElement('div'); div.innerHTML = decodeURIComponent(myString); $("#myUL").append(div.innerHTML); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="myUL"> </ul> 

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

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