从加载了Request.HTML的页面中通过ID抓取单个元素

时间:2010-12-05 22:07:29

标签: javascript ajax mootools

我正在加载包含许多元素的页面,并且一旦加载,就需要能够获取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”。

2 个答案:

答案 0 :(得分:1)

ER。 array.filter - 据我所知 - 对于mootools中的Array类型的渐进增强功能与此完全相同:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter(添加此回调方法到不支持它的浏览器)。典型的用法是通过一个函数来迭代元素并保留那些返回trulyhttp://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

的元素集合也应如此