jQuery find () не очень хорошо играет с Chrome.Есть идеи? - PullRequest
1 голос
/ 17 января 2012

Мой сайт использует AJAX для извлечения некоторых данных с другой страницы и отображения их локально. Внешняя страница извлекается с помощью jQuery.get(), а затем я извлекаю нужные данные с помощью jQuery.find(). Это прекрасно работает в IE, FF, Opera и Safari, но не работает в Chrome. После отслеживания данных я вижу, что данные внешней страницы возвращаются, это функция find (), которая не работает. Это выглядит так:

var f = $(data).find('h5 > a');

Я провел несколько поисков и не очень много видел по этому поводу. Кто-то упомянул, что это может быть проблема с dataType, поэтому изменил get() на оператор ajax() и изменил dataType на 'text', но в Chrome он все еще не работает (по-прежнему работает во всем остальном).

Есть мысли, как это исправить?

Ответы [ 3 ]

1 голос
/ 17 января 2012

Это странный глюк в jQuery

Если вы напишите

var htmlContent = '<html><body><div class="toto">Hello World!</div></body></html>';
$(htmlContent).find('.toto'); // length = 0
$('<div>' + htmlContent + '</div>').find('.toto'); // length = 1

Единственный известный мне обходной путь - поместить вашу HTML-разметку в тег div.

$('<div>' + myHtml + '</div>')
0 голосов
/ 17 января 2012

Спасибо за помощь, и теперь я ее исправил.Для чего это стоит, это все еще странный Chrome.И для людей, которые сказали: «Можем ли мы увидеть данные», извините, я не смог их предоставить, но это бы очень помогло, если бы я мог.В любом случае, решение не имело ничего общего с подпрограммой find (), но имело какое-то отношение к селекторам.

Короче говоря, на странице есть элемент управления крошкой.Хлебные крошки являются ключом к тому, что происходит, потому что они имеют ссылки на страницы, которые привели к текущей странице, и это одна из тех ссылок, к которым нам нужно перейти.Таким образом, типичные хлебные крошки выглядят так:

Домой> Категория> Продукт

Мне нужно получить данные со страницы категории.В IE, FF и во всем остальном этот код выполняет следующие действия:

var categoryName = $ ('# ctl00_breadcrumbContent span: nth-child (3)> a'). Html ();

В Chrome этот селектор захватывает не того ребенка.Однако в Chrome это работает:

var categoryName = $ ('# ctl00_breadcrumbContent span: nth-child (2)> a'). Html ();

(мы хватаем второго ребенка, а не третьего)

Не уверен, почему Chrome считает детей по-разному?Кажется, что Chrome считает от 0, в то время как другие браузеры считают от 1?Просто предположение с моей стороны.В любом случае, Chrome перехватил неправильный URL, и поэтому возвращаемая страница была не той, которую я искал.Это было исправлено путем обнаружения наличия Chrome и его компенсации.

0 голосов
/ 17 января 2012

Попробуйте var f = $ (data) .find ('> h5> a');

p.s. Было бы удобно, если бы вы также могли опубликовать значение данных

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