正常效果:用正则将指定的ul标签内的li以2个为一组匹配出来,弹出匹配的数量(length)
报错现象:js正则匹配,firefox、chrome都显示正常,唯独ie浏览器显示.length为空或不是对象
问题代码:
<ul> <li> 我是第1个li </li> <li> 我是第2个li </li> <li> 我是第3个li </li> <li> 我是第4个li </li> </ul> <script type="text/javascript"> var $str=$("ul").html(); alert($str); var $r=/(<li>.*?<\/li>){2}/gi; var $result=$str.match($r); alert($result.length); </script>
运行后,发现并没有alert数据出来,调试中报错:.length为空或不是对象(Cannot read property 'length' of null )
解析:使用jq的html()方法返回的html代码,chrome、firefox会按原html格式返回,如图:
但是ie系列的浏览器会自作聪明的把原html代码的所有标签都改成大写字母返回并且每一个标签间加一个换行符,如图:
也正是因为这原因,上述代码,chrome、firefox都能返回2个匹配元素,而ie无法根据现有正则匹配元素,因此就可以解释ie为什么会返回.length为空或不是对象,因为根本就没匹配到任何元素!
综上所述,改进正则写法如下:
提示:你可以先修改部分代码再运行。
网上针对” .length为空或不是对象“报错的资料基本没用,记录下备忘,方便遇到同样问题的童鞋看完这篇文章也能够找到解决问题的思路或方法!!
2条评论( 网友:1 条,站长:1 条 ) 网友评论{有您的评论更精彩....}