我正在加载包含许多元素的页面,并且一旦加载,就需要能够获取ID为“panel_1”的单个DIV。这就是我目前的做法:
var Req = {
main: new Request.HTML({
onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
var panel_1 = responseElements.filter('#panel_1');
Blinds.updatePanel('panel_1', panel_1);
}
})
};
Req.main.send({
method:'get',
url: 'default.php'
});
Blinds.updatePanel()
只是一个获取该内容并将其插入正确DIV的函数。
除了Internet Explorer之外,这一切都正常。出于某种原因,它只是在responseElements.filter('#panel_1')
上窒息。有什么想法吗?
更新
出于某种原因,当我在IE8中尝试这个时:
var Req = {
main: new Request.HTML({
onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
alert(responseElements.filter('#panel_1').get('id'));
}
})
};
我收到此错误:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Timestamp: Mon, 6 Dec 2010 00:07:58 UTC
Message: Object doesn't support this property or method
Line: 228
Char: 74
Code: 0
URI: http://ideacity.smallparade.com/js/mootools/mootools-core-1.3-full-nocompat-yc.js
其他浏览器提醒“panel_1”。
答案 0 :(得分:1)
ER。 array.filter
- 据我所知 - 对于mootools中的Array
类型的渐进增强功能与此完全相同:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter(添加此回调方法到不支持它的浏览器)。典型的用法是通过一个函数来迭代元素并保留那些返回truly
(http://mootools.net/docs/core/Types/Array#Array:filter)的函数:
new Request.HTML({
url: '/echo/html/',
method: 'post',
onComplete: function() {
var panel, elTemp = $$(this.response.elements).filter(function(el) {
return $(el) && el.get && el.get("id") == 'panel_1';
});
if (elTemp.length)
panel = elTemp[0];
alert(panel.id);
}
}).send();
看到它适用于你的html:http://jsfiddle.net/PCTsz/3/
答案 1 :(得分:0)
尝试更改:
var panel_1 = responseElements.filter('#panel_1');
为:
var panel_1 = $$(responseElements).filter('#panel_1')[0];
您还可以将$(element)
用于单个元素,或者在较新的mootools构建中使用document.id(element)
。在IE中这样做的原因是使用$()
或document.id()
强制IE元素来“抢夺”mootools元素方法。我相信使用$$(elements)
方法Mootools Element docs