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 B</span> </html> 我試過 代碼: javascript:alert('A B'==document.getElementById('space').firstChild.nodeValue) javascript:alert('A 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 B'==document.getElementById('space').innerHTML)
會是true 不過innerHTML不是標準,與此版塊主題不合,而且在Fx3.5 innerHTML比nodeValue慢了10倍。 |
發表人: | Dark Shenada [ 2009-07-16, 00:15 ] |
文章主題 : | |
不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧 |
發表人: | shyangs [ 2009-07-16, 00:37 ] |
文章主題 : | |
Dark Shenada 寫: 不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧
代碼: javascript:alert(document.getElementById('space').firstChild.nodeValue)
的結果是'A B',我知道。 所以,
假設 nodeValue早就把'A B'轉成'A B',那
不是應該是true嗎? |
發表人: | Dark Shenada [ 2009-07-16, 03:43 ] |
文章主題 : | |
shyangs 寫: Dark Shenada 寫: 不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧 代碼: javascript:alert(document.getElementById('space').firstChild.nodeValue) 的結果是'A B',我知道。 所以,
假設 nodeValue早就把'A B'轉成'A B',那
沒錯, 是我搞錯了, 我忘了用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 板友。 訪客先生 寫:
|
發表人: | 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/ |