2010-01-06 32 views
1

正如標題我有在所有IE版本原型的更新功能,但它在FF工作和鍍鉻原型更新()在IE

這並不工作

var element = $('mainnav_h'); 
element.cleanWhitespace(); 
var html = element.firstChild.innerHTML; 
html = html.gsub('<span class="sep"></span>', ''); 
element.firstChild.update(html);//this doesn't word 

問題不工作但這個工程

var element = $('mainnav_h'); 
element.cleanWhitespace(); 
var html = element.firstChild.innerHTML; 
html = html.gsub('<span class="sep"></span>', ''); 
element.firstChild.update("this works"); 

<div class="innerNavigation_horizontal clear"> 
    <ul id="mainnav_h"> 
     <li><span class="sep"></span><a href="#" title="#">items</a></li> 
    </ul></div> 

,你可以清楚地看到,當我通過變量來更新()函數在IE的地方不工作,當我在傳遞字符串到它,它工作在IE瀏覽器,可有人解釋這種荒謬的行爲IE

薩爾曼

回答

0

我的猜測是,這個問題是不是與update(),但與在HTML工作前的功能之一。

你可以在腳本的每個階段使用alert()做html測試輸出嗎?它是否包含任何東西?

#mainnav_h是什麼樣子的?你可以發佈源?

element.firstChild確實存在嗎?你可以檢查使用

alert(typeof element.firstChild); 

你在IE中得到任何錯誤信息?

+0

alert(typeof element.firstChild);它的一個對象,它確實存在,我只是警告(HTML),並發現gsub函數不能在IE中工作,#mainnav_h是列表中的ul id,其子項是列表項,我想要的是刪除''這來自ul im的第一個孩子的innerHTML也發帖來源 – Salman 2010-01-06 12:11:47

+0

我也懷疑'gsub'。怎麼樣一個簡單的'replace()'而不是? http://www.w3schools.com/jsref/jsref_replace.asp請記住,您需要將您的模式作爲正則表達式提交(即轉義特殊字符)。 – 2010-01-06 12:19:46

+0

替換(/ <[^<]+?> \ <\/span\>/g,'');我使用正則表達式,並做了建議,順便說一下,我還注意到,IE和FF有不同的方法來呈現HTML這裏是一個例子 IE將顯示這個(),而FF將顯示()請注意用雙引號括起來的類名,整個html都是小寫,一個應該關心這些差異,否則你的正則表達式可能會失敗,你不知道爲什麼它在FF中工作,而不是IE以及反之亦然 – Salman 2010-01-06 19:55:24

0

在這種情況下,問題顯然與HTML外殼/語法有關,但對於到達此處的其他Google員工,我可以推薦禁用IE兼容模式。

文檔模式IE7標準:

>> span = document.createElement("span"); 
[object] { 
    nextSibling : , 
    onresizeend : null, 
    onrowenter : null, 
    aria-haspopup : "", 
    childNodes : [object], 
    ondragleave : null, 
    oncut : null, 
    clientHeight : 0, 
    onbeforepaste : null, 
    ondragover : null 
    ... 
} 
>> span.update() 
"Object doesn't support property or method 'update'" 

文檔模式IE9標準:

>> span = document.createElement("span"); 
[object] { 
    nextSibling : , 
    onresizeend : null, 
    onrowenter : null, 
    aria-haspopup : "", 
    childNodes : [object], 
    ondragleave : null, 
    oncut : null, 
    clientHeight : 0, 
    onbeforepaste : null, 
    ondragover : null 
    ... 
} 
>> span.update() 
[object] { 
    nextSibling : , 
    onresizeend : null, 
    onrowenter : null, 
    aria-haspopup : "", 
    childNodes : [object], 
    ondragleave : null, 
    oncut : null, 
    clientHeight : 0, 
    onbeforepaste : null, 
    ondragover : null 
    ... 
} 

這當然會我可以很容易地通過執行重新創建IE-控制檯(F12)的問題,只有在加載原型框架的網站上運行控制檯時纔有效,例如www.redmine.org。