jQuery find () возвращает ноль только в IE - PullRequest
1 голос
/ 22 августа 2011

Я пытаюсь загрузить контент с другой страницы, используя jQuery .post (), чтобы проанализировать возвращенный HTML, чтобы вытащить только те части, которые я хочу.

Проблема в том, что, хотя это работает в Firefox и др., Оно не работает в IE.

Я отследил проблему до функции find (). И IE, и FF успешно загружают html с другой страницы (которая хранится в этом объекте «data»), используя post. Однако пока линия

debugText += jq(data).find('#timeline_events').html();

выводит в Firefox, в IE - ноль.

Я провел обширное исследование, и, насколько я могу судить, это может быть связано либо с конфликтами jquery, либо с тем, что загружаемая страница имеет формат xhtml.

В первом случае именно по этой причине я использую var jq = jQuery.noConflict () и использую «jq» вместо «$» во всех вызовах jquery. Во втором случае я попытался объявить тип данных post return явно как html, так и xml, без изменений в результате.

Есть идеи?

<script type="text/javascript" charset="utf-8"> 
var jq=jQuery.noConflict();
var debugText = ""; 
function loadNext() 
{ 
    jq.post("test.html", function(data) 
    {
        debugText += jq(data).find('#myEvents').html();
    }
}
</script>

Обновление: Вот пример HTML-кода с тестовой страницы, который я хочу загрузить на текущую страницу:

<table id="myEvents">
    <tbody>
        <tr>
            <td>Test</td>
        </tr>
    </tbody>
</table>

В конечном итоге я хочу извлечь элементы td из этой таблицы и вставить их в другую таблицу на моей текущей странице.

-Update- Версия jQuery, которую я использую: 1.2.3

Загрузка данных в скрытый объект в документе, а затем использование jquery для выбора необходимого элемента id приводит к тому же результату, то есть к нулевому значению в IE, и работает иначе.

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

IE очень точен в том, что он "загружает" в DOM. Если ваш контент не очень хорошо сформирован, вы получите именно такое поведение. У меня была такая же проблема, и оказалось, что у рассматриваемого элемента был родитель, который не был должным образом закрыт.

0 голосов
/ 22 августа 2011

Я предполагаю, что jQuery анализирует ответ, как если бы он анализировал XML, что означает find, filter, а в IE по какой-то причине не работает ряд других методов.

Попробуйте jq('[id=timeline_events]', data)

.html() также может не работать;вам может понадобиться .text().

Лучшим решением может быть просто добавить ответ на страницу и проанализировать его там.

function(data){
    var $container = $('<div style="display:none">');
    $('body').append($container);
    $container.html( data );
    var html = $container.find('#timeline_events").html();
    $container.remove();
}
...