jquery opera浏览器的奇怪问题

我设计了如下的测试代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<script type="text/javascript">
$(function(){
//alert($("form select,:input").size());
$(':submit').click(function(){
var obj=$(this).closest("form");
alert($(obj).is("form"));
return false;
});
});
</script>
</head>
<body>
<table width="500" border="1" cellspacing="1" cellpadding="2">
<form id="form1" name="form1" method="post" action="#1">
<tr>
<td><input type="text" name="textfield" id="textfield" /></td>
</tr>
<tr>
<td><textarea name="textarea" id="textarea" cols="45" rows="5"></textarea></td>
</tr>
<tr>
<td><input type="checkbox" name="checkbox" id="checkbox" /></td>
</tr>
<tr>
<td><select name="select" id="select">
</select>
</td>
</tr>
<tr>
<td>
<input type="submit" name="button" id="button" value="提交" /> </td>
</tr></form>
</table>

使用opera浏览器:
当form标签在table内部时,使用JQUERY的closest函数从submit标签开始无法获取到form标签,使用parent标签,从submit标签开始向上套取,获取到的是td,tr,tbody,table跳过了form标签。
使用ie浏览器一切正常,这是为何啊?哪位高手能测试下。
各位高手,可以复制我的代码,分别在两种不同的浏览器下测试下,会出现不同的结果,IE能正常给出true对话框,但是OPERA只能给出FALSE对话框。
一试便知结果~~

这个不是非常可能..这个本身就是jquery的语句...
$.browser是jquery的一个内置的工具吧..因为我平时也很少用这个语句..它是为了检测你的浏览器是哪种浏览器的..jquery将它门分为4种..分别是IE FF和SAFARI...一组..还有OPERA..另外的就是其他浏览器...这个工具其实很少用到.因为jquery它本身就对浏览器有很好的兼容性..基本上你写出来的jquery代码哪到任何一个浏览器上都能用...但是也有极少的情况会出现浏览器的不兼容..比如..给现有的一组select插入元素...因为我们知道..往select里面插入元素很好插入.只需要利用DOM....但是..如果是已经排好序的select..1,2,3,4,5,要插入2.5..每个浏览器对这个处理都不一样...所以browser就可以检测出..是哪种浏览器然后相应的做出判断...但是具体的插入还需要你自己来写.因为jquery没有针对这一个问题专门的设了一种插入的方法...

//CSS

...在jquery里实现页面元素加上CSS有两种方式..一种就是addclass()为元素加上CLASS...然后在style里自己可以指定元素的样式..另一种就是CSS...这个用法是跟你在style里的写法是一样的...我这边说的一样指的是CSS的属性一样..比如:
font-size:12px;你可以这样写..但是也可以写成这样fontSize.这个叫驼峰写法..不仅在jquery里...JS也是一样的...比如.
elem.style.font-size和elem.style.fontSize是一样的意思..
//抱歉..js里好象不可以用-这个方式写..只能出现驼峰式的..

jquery里的.CSS方法有点特别...如果你是指定一个CSS属性的话..可以这样写
$('#elem').css('font-size','12px');左边是样式属性..右边是值.中间,隔开..
但是对于多的CSS呢???你可以一个个的写.css..但是这样很麻烦..体现不出jquery的宗旨"更少代码做更多事"..
jquery里这样写$('#elem').css()
这样就指定了elem ID的元素2个CSS属性.margin和font-size...这个属于对象字面量的写法..如果你学过json的话.或者有过JS的对象写法就应该很清楚这种写法了...

当然..如果你想指定一个CSS属性.同样可以写成那样..以键:值的方式来写..多个键值间用,隔开..

$('#elem').css('margin','12px')=====$('#elem').css()
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-01

分析一下dom就行了

IE和FF等其他浏览器不一样的~~~

追问

opera浏览器获取到的是td,tr,tbody,table跳过了form标签。
IE一切正常~~
很是奇怪!

追答

是这样的 因为IE有他自己的渲染模式
所以 写代码 还是按照标准来,W3C验证你这个代码是过不了的~~!原因就是标签嵌套错误

本回答被提问者采纳
相似回答