MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-06-27, 00:09

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 9 篇文章 ] 
發表人 內容
文章發表於 : 2009-07-15, 22:09 
離線
[網站管理員]
頭像

註冊時間: 2006-11-22, 16:07
文章: 560
我想用 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倍


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 00:15 
離線
頭像

註冊時間: 2003-10-27, 02:07
文章: 380
來自: Taipei, Taiwan
不可能, 只要用nodeValue就不可能, 到DOM時nodeValue早就把'A&nbsp;B'轉成'A B'了, 乖乖用innerHTML或是乾脆用rexp吧

_________________
Meetings: Because none of us is as dumb as all of us.

- Firefox embedded化商業顧問中
- Linux embedded化商業顧問中
- Linux 系統顧問中
- 系統整合的雜七雜八顧問中
- Android開發中: 正在跟ARM的EGLIBC纏鬥中 .....
- Windows Mobile開發中: 就讓WM走入歷史吧 !


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 00:37 
離線
[網站管理員]
頭像

註冊時間: 2006-11-22, 16:07
文章: 560
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嗎?

 


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 03:43 
離線
頭像

註冊時間: 2003-10-27, 02:07
文章: 380
來自: Taipei, Taiwan
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)

_________________
Meetings: Because none of us is as dumb as all of us.

- Firefox embedded化商業顧問中
- Linux embedded化商業顧問中
- Linux 系統顧問中
- 系統整合的雜七雜八顧問中
- Android開發中: 正在跟ARM的EGLIBC纏鬥中 .....
- Windows Mobile開發中: 就讓WM走入歷史吧 !


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 09:28 
離線
頭像

註冊時間: 2005-04-02, 21:10
文章: 240
插花問一下,如果要改變DOM物件的內容是html(如下例),而非純文字字串,要怎麼做才能取代使用innerHTML呢?

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


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

_________________
圖檔


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NE
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 15:42 
離線
[網站管理員]
頭像

註冊時間: 2006-11-22, 16:07
文章: 560
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>


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 15:56 
離線
[網站管理員]

註冊時間: 2005-01-02, 05:49
文章: 3220
代替訪客先生,留言給 shyangs 板友。

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

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

_________________
【Firefox 有問題請先看這裡】
回覆文章的建議
萬用自我檢測除錯大法 for Firefox
完全備份大法 for Firefox
重建 Firefox 的設定
乾淨升級 Firefox
(本帳號停用中)


回頂端
Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.9.0.11pre) Gecko/2009050620 Firefox/3.0.11pre (Swiftfox)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-16, 16:13 
離線
頭像

註冊時間: 2005-04-02, 21:10
文章: 240
主要是想知道有沒有比innerHTML執行速度更快的方法,如果正規的方式是既麻煩又慢,那應該沒人會考慮吧。

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

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

_________________
圖檔


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NE
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2009-07-17, 11:02 
離線
[網站管理員]
頭像

註冊時間: 2006-11-22, 16:07
文章: 560
arphen 寫:
主要是想知道有沒有比innerHTML執行速度更快的方法,如果正規的方式是既麻煩又慢,那應該沒人會考慮吧。


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

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

 


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 9 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群