jQuery 1.8.2中$(this).find仅IE生效,Chrome/FF失效问题咨询
为什么jQuery 1.8.2的
find()方法仅在IE11生效,Chrome/FF返回空白? 这大概率是jQuery 1.8.2在不同浏览器中解析HTML字符串的行为差异,加上你对find()方法的误用导致的,我来给你拆解下:
核心原因分析
假设你的原始代码类似这样(根据现象推测):
var htmlContent = '<span class="product">testValue</span>'; var $jqObj = $(htmlContent); var existingProduct = $jqObj.find('.product').text();
- 在IE11中,老版本的jQuery会自动把单个根元素的HTML字符串包裹到一个临时容器(比如
<div>)里,此时$jqObj指向的是这个容器,find('.product')能定位到容器内的<span>,所以能正常返回testValue。 - 但在Chrome/Firefox这类标准浏览器中,jQuery会直接将
<span>作为$jqObj的目标元素。而find()方法的作用是查找当前元素的后代元素,并非元素本身,所以自然找不到匹配项,返回空白。
解决方案
根据你的需求,有两种可靠的修正方式:
- 用
filter()代替find():如果要匹配的是HTML字符串的根元素,filter()会筛选当前jQuery集合中的元素,而非查找后代:var existingProduct = $jqObj.filter('.product').text(); - 手动包裹容器后再
find():这种方式能统一各浏览器的解析行为,避免差异:var existingProduct = $('<div>').append(htmlContent).find('.product').text();
额外提示
jQuery在后续版本中已经统一了HTML字符串的解析逻辑,但你使用的1.8.2是比较老旧的版本,所以存在这种浏览器兼容问题。另外也可以检查下你的HTML字符串是否存在未闭合标签、格式错误等问题,这类问题也可能导致不同浏览器生成的DOM结构不一致,进而影响find()的结果。
内容的提问来源于stack exchange,提问作者webdad3
相关产品推荐
相关产品推荐

