我們正在使用jQuery 1.5.1在我正在使用的網站上。我最近在Internet Explorer 8中發現了一個與我的HTML有關的問題jQuery在Internet Explorer 8的HTML標記中插入nodeIndex屬性
問題是'nodeIndex'屬性被插入到DOM中,大概是由jQuery插入的(請參閱下面有關提到nodeIndex的另一個StackOverflow問題)。該屬性不在頁面源代碼中 - 只有在DOM中,然後使用IE8(真棒)開發人員工具檢查它。
在IE8的DOM:
<DIV nodeIndex="4">
<B nodeIndex="1">bold</B>
<BR nodeIndex="2">
<I nodeIndex="3">italics</I>
<BR nodeIndex="4">
<U nodeIndex="5">underline</U>
<BR nodeIndex="6">
</DIV>
在FF5(和Chrome 12)DOM:
<div>
<b>bold</b>
<br>
<i>italics</i>
<br>
<u>underline</u>
<br>
</div>
的問題是,DIV是一個論壇帖子的文字內容。如果用戶想要引用論壇帖子,則帖子的html將被轉換爲BBCode(因爲較舊的論壇帖子使用BBCode標籤進行標記),並保持格式標記,並將其複製到用戶寫入新論壇帖子的文本(包括引用文本)。
使用JavaScript/jQuery可以很簡單地用相應的BBCode標籤替換html標籤,但是添加nodeIndex屬性使得有必要添加nodeIndex屬性的正則表達式替換,這看起來像一個醜陋的黑客。
誰能告訴我爲什麼在IE8(和IE7)中添加nodeIndex屬性,它是jQuery添加它們 - 更重要的是:我可以擺脫它們比使用正則表達式替換更好?
我工作的網站使用了一堆不同的JavaScript/jQuery腳本,因此可能會有衝突或至少是某些意外行爲,這些行爲是腳本組合的結果。
編輯:當在IE中禁用JavaScript時,屬性不存在。
其他StackOverflow的疑問,提到nodeIndex: Is nodeIndex a valid DOM element property in IE?
感謝您的解釋@Tomalak。非常有意義的是nodeIndex屬性插入在IE7和8中,而不是在IE9和FF中。我忘記了jQuery中的removeAttr()方法 - 比操作html字符串的正則表達式更脆弱。 – Hildesheim
@Hildesheim:絕對。同樣的事情會在服務器端工作,但絕對是更多的代碼行。但是,如果您已經有了將輸入HTML轉換爲BBcode的服務器端代碼,那麼在客戶端上執行這種操作是沒有意義的。 – Tomalak
在這種情況下,我希望將文本複製到textarea而不必重新加載頁面,所以我最終使用了您建議的jQuery(removeAttr)。完美工作 - 也可以使用在某些情況下插入的'sizcache'和'sizset'屬性。 – Hildesheim