好吧,我承认,我的js很菜,所以这个问题不要笑我。。事情是这样的html代码:<form ...>
<input type="checkbox" onclick="selectAll(this,chk)" >
</form>
这里面的this,我查了一下,说是input这个元素结点的引用js代码 是这样的
var selectAll = function(obj,chk){
var inputs = obj.form.getElementsByTagName("INPUT");
//请问这些为什么要用obj.form.get.....这样的写法?这里的obj不是元素结点吗?后面跟着form是不是代表这个节点的父元素?正常的写法好像是从文档流>具体元素>子元素>属性
//再问,如何将上面这句话变成jquery的语法?
}
<input type="checkbox" onclick="selectAll(this,chk)" >
</form>
这里面的this,我查了一下,说是input这个元素结点的引用js代码 是这样的
var selectAll = function(obj,chk){
var inputs = obj.form.getElementsByTagName("INPUT");
//请问这些为什么要用obj.form.get.....这样的写法?这里的obj不是元素结点吗?后面跟着form是不是代表这个节点的父元素?正常的写法好像是从文档流>具体元素>子元素>属性
//再问,如何将上面这句话变成jquery的语法?
}
function selectAll(obj, chk) {
var inputs = obj.parentNode.getElementsByTagName('input');
}
//jQuery:
function selectAll(obj, chk) {
var inputs = $(obj).parent().find("input");
}
this.form也是可以的,form是表单元素对象的一个标准属性,值为包含该表单对象的form元素的引用。
没这么用过,感觉确实挺别扭的,还是习惯this.parentNode这种方式来查找父节点。
document.getElementById();
父元素是document,
另外一个是form型的:
就是以form的name为父元素,依次往下取值,当然这种也是浏览器兼容的。
document.form.getElementsByTagName("INPUT");<div id="testform">
<form name="myform" action="">
<input type="text" name="username" id="username" value="jikey" id="">
</form>
</div>
<script type="text/javascript">
function id(){
return document.getElementById(arguments[0]);
}
var testf = id('testform'), username = id('username');
var val1 = document.myform.username.value;
var val2 = id('username').value;
console.log(val1 == val2);
</script>
<input type="checkbox" onclick="selectAll(this,chk)" >
<input name="chekboxs[]" value="1" />
<input name="chekboxs[]" value="2" />
</form>var selectAll = function(obj,chk){
var inputs = obj.form.getElementsByTagName("INPUT");
alert(inputs.length);
}上述代码在ie中能够运行,但在chrome及ff中就不行了,输出长度为0
<form ...>
<input type="checkbox" onclick="selectAll(this,'chekboxs')" >
<input name="chekboxs[]" value="1" />
<input name="chekboxs[]" value="2" />
</form><script type="text/javascript">
var selectAll = function(obj,chk){
//var inputs = obj.form.getElementsByTagName("INPUT");
//var inputs = jQuery(obj.form).find('input');
var inputs = $(obj).parent().find("input");
alert(inputs.length);
}
</script>
用您的方法,alert打印出来的是1
用var inputs = jQuery(obj.form).find('input');打印全部但只仅于在ie中,到谷歌及火狐都无效。。难道是我人品有问题?
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
</head><body>
<form>
<input type="checkbox" onclick="selectAll(this,'chk')" >
<input name="chekboxs[]" value="1" />
<input name="chekboxs[]" value="2" />
</form>
<script type="text/javascript">
function selectAll(obj, chk) {
var inputs = $(obj).parent().find('input');
alert(inputs.length);
}
</script>
</body>
</html>
是的,原生JS .parentNode、jQuery .parent()方法都是返回直接父元素。
<input type="checkbox" onclick="selectAll(this,chk)" >
</form>this代表本身 你传进去的是 type = checkbox 本身var selectAll = function(obj,chk){
var inputs = obj.form.getElementsByTagName("INPUT");
}而在JS里面 你是把他当做表单用还是怎么的不懂你是什么意思
obj.form.getElementsByTagName("INPUT");
你这句话就等于 type="checkbox".form.getElementsByTagName("INPUT");
这当然有错