2015-09-26 64 views
4

說我有這樣的HTML元素:測試特殊字符的JavaScript

<td>&mdash;</td> 

當瀏覽器解析,&mdash;轉換爲實際的破折號,像這樣:

<td>—</td> 

我怎麼能測試&mdash;而不在我的JavaScript代碼中使用其他字符?

console.log(elem.innerHTML == "&mdash;"); // false 
console.log(elem.textContent == "&mdash;"); // false 
console.log(elem.innerHTML == "—"); // true 
console.log(elem.textContent == "—"); // true 
+1

與jquery:'elem.innerHTML == $( 「」) .html()' –

+0

'elem.innerHTML == document.createRange()。createContextualFragment(「<」).firstChild.textContent' –

+0

@SheraliTurdiyev,非常整潔。你應該考慮加入它作爲答案(當然有更多的解釋)。 – rnevius

回答

3

您可以創建一個新的DOM元素,並比較兩種:

/** 
 
* Test that a DOM element's inner HTML is === &mdash; 
 
*/ 
 
function mdashTest(el) { 
 
    var tempEl = document.createElement('div'); 
 
    tempEl.innerHTML = '&mdash;'; 
 

 
    return el.innerHTML === tempEl.innerHTML; 
 
} 
 

 
// Test it! 
 
elem = document.getElementById('dash'); 
 
alert(mdashTest(elem));
<div id="dash">&mdash;</div>

3

emdash的unicode等價物是\u2014。你可以使用這個Unicode與HTML進行比較。

HTML meta的默認編碼設置爲UTF,因此所有實體都轉換爲UTF-8。閱讀更多https://developer.mozilla.org/en/docs/Web/HTML/Element/meta#Attributes

var dash = document.getElementById('dash').innerText; 
 

 
alert(dash === '\u2014');
<div id="dash">&mdash;</div>

+0

聰明的解決方案。但是,我仍然想在我的代碼中使用'—'而不是其他任何字符 – vqdave

+0

@RichardWallace嘗試更改charset,如http://stackoverflow.com/questions/835821/reading-utf8-chars-using-innerhtml-returns- 0xfffd爲所有字符的答案 – Tushar

2

我建議:

  1. 通過DOMParser()

function parseToText(code) { 
 
    return new DOMParser().parseFromString('<em>' + code + '</em>', "text/html").firstChild.textContent; 
 
} 
 
var is = document.getElementById('text').innerHTML == parseToText("&mdash;"); 
 
document.write("isEquals ", is, parseToText("&mdash;"));
<em id="text">&mdash;</em>

  • 或者,用jQuery:
  • function parseToText(code) { 
     
        return $("<em>" + code + "</em>").html() 
     
    } 
     
    var isEquals = document.getElementById('text').innerText == parseToText("&mdash;"); 
     
    document.write("isEquals ", isEquals);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
     
    <em id="text">&mdash;</em>

  • 或者,與普通的JavaScript:
  • function parseToText(code) { 
     
        return document.createRange().createContextualFragment(code).firstChild.textContent; 
     
    } 
     
    var isEquals = document.getElementById('text').innerText == parseToText("&mdash;"); 
     
    document.write("isEquals ", isEquals);
    <em id="text">&mdash;</em>