MozTW 討論區
https://forum.moztw.org/

怎麼辨識出HTML中的含有 的文字節點
https://forum.moztw.org/viewtopic.php?f=13&t=27421
1 頁 (共 1 頁)

發表人:  shyangs [ 2009-07-15, 22:09 ]
文章主題 :  怎麼辨識出HTML中的含有 的文字節點

我想用 js 辨識 HTML 中的一個文字節點,該節點含有 


以一個簡單的 HTML 為例
代碼:
<html>
<span id="space">A&nbsp;B</span>
</html>


我試過
代碼:
javascript:alert('A B'==document.getElementById('space').firstChild.nodeValue)

javascript:alert('A&nbsp;B'==document.getElementById('space').firstChild.nodeValue)

javascript:alert('A%20B'==document.getElementById('space').firstChild.nodeValue)

javascript:alert('A\u0020B'==document.getElementById('space').firstChild.nodeValue)


答案都是false,怎樣寫才會是true

--
補充:如果使用innerHTML
代碼:
javascript:alert('A&nbsp;B'==document.getElementById('space').innerHTML)

會是true

不過innerHTML不是標準,與此版塊主題不合,而且在Fx3.5 innerHTML比nodeValue慢了10倍

發表人:  Dark Shenada [ 2009-07-16, 00:15 ]
文章主題 : 

不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A&nbsp;B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧

發表人:  shyangs [ 2009-07-16, 00:37 ]
文章主題 : 

Dark Shenada 寫:
不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A&nbsp;B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧


代碼:
javascript:alert(document.getElementById('space').firstChild.nodeValue)

的結果是'A B',我知道。

所以,
    javascript:alert('A B'==document.getElementById('space').firstChild.nodeValue)
的結果是false,我才覺得很奇怪呀@@a

假設 nodeValue早就把'A&nbsp;B'轉成'A B',那
    'A B'==document.getElementById('space').firstChild.nodeValue;

不是應該是true嗎?

 

發表人:  Dark Shenada [ 2009-07-16, 03:43 ]
文章主題 : 

shyangs 寫:
Dark Shenada 寫:
不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A&nbsp;B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧


代碼:
javascript:alert(document.getElementById('space').firstChild.nodeValue)

的結果是'A B',我知道。

所以,
    javascript:alert('A B'==document.getElementById('space').firstChild.nodeValue)
的結果是false,我才覺得很奇怪呀@@a

假設 nodeValue早就把'A&nbsp;B'轉成'A B',那
    'A B'==document.getElementById('space').firstChild.nodeValue;
不是應該是true嗎?


沒錯, 是我搞錯了, 我忘了用unicode char(ucs2-le)來比對, 而是用char來比對, 正解是:

"A\u00a0B"==document.getElementById('space').firstChild.nodeValue

P.S: 現在才知道原來unicode有定義nbsp阿 ..... -_-|||
P.S: javascript內部編碼為UCS-2(little endian ?), 在linux下也並未follow系統的UCS-4(depend on CPU endian ?)(由iconv/glibc負責處裡 ?), 所以firefox的javascript不支援U+10FFFF~U+010000間的字 ? 那DOM呢 ?

note:
77855 (U+1301f)
String.fromCharCode(77855).charCodeAt();
12319 (U+301f)

發表人:  arphen [ 2009-07-16, 09:28 ]
文章主題 : 

插花問一下,如果要改變DOM物件的內容是html(如下例),而非純文字字串,要怎麼做才能取代使用innerHTML呢?

代碼:
var d = document.getElementsByTagName("div")[0];
d.innerHTML = '<span>some html content</span>';  // 有無較佳的替代作法?


shyangs 寫:
不過innerHTML不是標準,與此版塊主題不合,而且在Fx3.5 innerHTML比nodeValue慢了10倍

發表人:  shyangs [ 2009-07-16, 15:42 ]
文章主題 : 

arphen 寫:
插花問一下,如果要改變DOM物件的內容是html(如下例),而非純文字字串,要怎麼做才能取代使用innerHTML呢?


我所知道的標準寫法要大動干戈,沒辦法一行innerHTML爽爽的達成。

用 removeChild 移除子節點,再用 createElement 創建元素節點,最後把新建的節點用 appendChild 黏到他應該待的位置。

以下寫一個範例。

代碼:
<html>
   <div>
      <ul>
         <li><a href="http://forum.moztw.org/viewforum.php?f=2">Firefox</a></li>
         <li><a href="http://forum.moztw.org/viewforum.php?f=11">Extension 擴充套件</a></li>
         <li><a href="http://forum.moztw.org/viewforum.php?f=13">問題網站與網頁技術傳教</a></li>
      </ul>
   </div>
<script>
var d=document.getElementsByTagName("div")[0];
//移除所有 d的子節點
while (d.firstChild)
{
  d.removeChild(d.firstChild);
}
var newSpan=document.createElement("span");
var newA=document.createElement("a");
newA.href="http://mozlinks-zh.blogspot.com";
newSpan.appendChild(newA);
var newText=document.createTextNode("Mozilla Links 正體中文版");
newA.appendChild(newText);
d.appendChild(newSpan);
</script>
</html>

發表人:  wini [ 2009-07-16, 15:56 ]
文章主題 : 

代替訪客先生,留言給 shyangs 板友。

訪客先生 寫:
用charCodeAt可以查出 的字碼是160,跟空白字元不同,
而且其實兩者在網頁上的顯示也不同,
是可以累加的。

補上一張表:
http://www.lookuptables.com/

發表人:  arphen [ 2009-07-16, 16:13 ]
文章主題 : 

主要是想知道有沒有比innerHTML執行速度更快的方法,如果正規的方式是既麻煩又慢,那應該沒人會考慮吧。

shyangs 寫:
我所知道的標準寫法要大動干戈,沒辦法一行innerHTML爽爽的達成。

用 removeChild 移除子節點,再用 createElement 創建元素節點,最後把新建的節點用 appendChild 黏到他應該待的位置。

發表人:  shyangs [ 2009-07-17, 11:02 ]
文章主題 : 

arphen 寫:
主要是想知道有沒有比innerHTML執行速度更快的方法,如果正規的方式是既麻煩又慢,那應該沒人會考慮吧。


融合了這兩種方法,不一定會比純innerHTML慢唷

參考
在 non-IE 瀏覽器修改 innerHTML 的速度 at Gea-Suan Lin’s BLOG
innerHTML的性能問題 - lveyo的BCNDYL - JavaEye技術網站

 

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/