Получение одного элемента по идентификатору со страницы, загруженной с помощью Request.HTML - PullRequest
0 голосов
/ 06 декабря 2010

Я загружаю страницу, которая содержит много элементов, и после загрузки мне нужно иметь возможность получить один DIV с идентификатором "panel_1". Вот как я сейчас это делаю:

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'). Есть идеи почему?

UPDATE:

Почему-то, когда я пытаюсь это сделать в 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 ]

1 голос
/ 06 декабря 2010

э. array.filter - насколько мне известно, - прогрессивное улучшение для типа Array в mootools, которое действует точно так же, как это: 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/

0 голосов
/ 06 декабря 2010

Попробуйте изменить:

var panel_1 = responseElements.filter('#panel_1');

на:

var panel_1 = $$(responseElements).filter('#panel_1')[0];

Вы также можете использовать $(element) для отдельных элементов или document.id(element) в новых сборках MooTools.Причина этого в IE заключается в том, что использование $() или document.id() заставляет элементы IE «захватывать» методы элемента mootools.Я полагаю, что то же самое должно пойти для коллекции элементов, использующих $$(elements) метод Mootools Element docs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...