我的网站使用AJAX从另一个页面提取一些数据并在本地显示。使用jQuery.get()
检索外部页面,然后使用jQuery.find()
提取我需要的数据。这在IE,FF,Opera和Safari中完美运行,但在Chrome中失败。跟踪数据后,我可以看到正在返回外部页面数据,它是失败的find()函数。它看起来像这样:
var f = $(data).find('h5 > a');
我做了一些搜索,并没有看到太多关于此事。有人提到它可能是一个dataType问题,因此将get()
更改为ajax()
语句并将dataType更改为“text”,但它仍然在Chrome中失败(仍可在其他所有内容中使用)。
有关如何解决这个问题的想法吗?
答案 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的存在并对其进行补偿来解决这个问题。