jQuery find()与Chrome没有很好的配合。有任何想法吗?

时间:2012-01-17 14:14:44

标签: jquery google-chrome

我的网站使用AJAX从另一个页面提取一些数据并在本地显示。使用jQuery.get()检索外部页面,然后使用jQuery.find()提取我需要的数据。这在IE,FF,Opera和Safari中完美运行,但在Chrome中失败。跟踪数据后,我可以看到正在返回外部页面数据,它是失败的find()函数。它看起来像这样:

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

我做了一些搜索,并没有看到太多关于此事。有人提到它可能是一个dataType问题,因此将get()更改为ajax()语句并将dataType更改为“text”,但它仍然在Chrome中失败(仍可在其他所有内容中使用)。

有关如何解决这个问题的想法吗?

3 个答案:

答案 0 :(得分:1)

这是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>')

答案 1 :(得分:0)

尝试var f = $(data).find('&gt; h5&gt; a');

P.S。如果你也可以发布数据的价值,这将是很方便的

答案 2 :(得分:0)

感谢所有的帮助,我现在已经解决了。值得一提的是,它仍然是Chrome的怪异主义。对于那些说“我们能看到数据”的人们,我很抱歉我无法提供,但如果可以的话,它会帮助很多。无论如何,该解决方案与find()例程无关,但确实与选择器有关。

长话短说,页面上有一个面包屑控件。面包屑是发生事情的关键,因为它具有指向导致当前页面的页面的链接,并且它是我们需要达到的那些链接之一。所以典型的面包屑看起来像这样:

主页&gt;分类&gt;产品

我需要从类别页面中提取数据。在IE,FF和其他所有内容中,此代码执行此操作:

var categoryName = $('#ctl00_breadcrumbContent span:nth-​​child(3)&gt; a')。html();

在Chrome中,此选择器会抓取错误的孩子。但是,在Chrome中,这可行:

var categoryName = $('#ctl00_breadcrumbContent span:nth-​​child(2)&gt; a')。html();

(我们抓住了第二个孩子,而不是第三个孩子)

不确定为什么Chrome会以不同的方式计算儿童?似乎Chrome似乎从0开始计算,而其他浏览器从1开始计算?只是猜测我自己。无论如何,Chrome正在抓取错误的URL,因此返回的页面不是我想要的页面。通过检测Chrome的存在并对其进行补偿来解决这个问题。