先上 代码 <div id="d">
<span>1
<span>**
<span>**
<span>**</span>
</span>
</span>
</span>
<span>2
<span>**
<span>**
<span>**</span>
</span>
</span>
</span>
</div> // jquery
$('#d span').css('color','red') //这样 所有span都有style="color:red"
$('#d > span').css('color','red') //这样 仅仅是 第一级(儿子)才有style="color:red"
我想问 怎样用js原生方法来 实现 选择 #d 的儿子元素。
<span>1
<span>**
<span>**
<span>**</span>
</span>
</span>
</span>
<span>2
<span>**
<span>**
<span>**</span>
</span>
</span>
</span>
</div> // jquery
$('#d span').css('color','red') //这样 所有span都有style="color:red"
$('#d > span').css('color','red') //这样 仅仅是 第一级(儿子)才有style="color:red"
我想问 怎样用js原生方法来 实现 选择 #d 的儿子元素。
解决方案 »
- 数组的sort() 怎么不好用阿,在线等,急
- 求助各位大侠了,这个页面浮动定位我实在无能为力了!
- jQuery中$定义问题
- jsp 中JavaScript不持续运行
- .innerHTM的值如何附给一个变量?
- 为什么,会出错。在线急!!
- javascript:popwin("http://192.168.0.1/hello.jsp?temp=1" )中的popwin之神末意思。
- Javascript正则表达式测试网页 (cm4ever原创)
- 怎么实现表单输入内容后点击按纽后提交到textarea里面。
- 大神哥哥
- 求助:JS+COOKIE的购物车实现单个商品的删除
- 请问:如何操作父元素能够缩放子元素
Array.prototype.appendList=function(arr){
for(var i=0;i<arr.length;i++){
this.push(arr[i]);
}
return this;
};
var Mit=mit=window.Mit=window.mit=__$$__=__$_$__={
inArray : function(arr,obj){
for(var i=0;i<arr.length;i++){
if(arr[i]==obj) return true;
}
return false;
},
_parseIdString : function(val){
var tems=[];
var arr=val.split("");
var _tv="";var L=arr.length;
for(var i=0;i<L;i++){
if(_tv==""){
_tv=arr[i];
if(i+1==L) tems.push({"val" : _tv, "type" : "e"});
}else if(/^[\s>+]$/.test(arr[i])){
if(/^\s$/.test(arr[i])) arr[i]="n";
if(!/^\s+$/.test(_tv)) tems.push({"val" : _tv, "type" : arr[i]});
_tv="";
}else{
_tv+=arr[i];
if(i+1==L) tems.push({"val" : _tv, "type" : "e"});
}
}
return tems;
},
_$ : function(id,doc){
if(typeof(id)!="string") return id;
if(doc==undefined) doc=document;
var rts=[];
if(/^[\w-]+$/.test(id)){//id="tagname"
rts=doc.getElementsByTagName(id);
}else if(/^#[\w-]+$/.test(id)){
rts.push(doc.getElementById(id.replace("#","")));//id="#id"
}else if(/^\.[\w-]+$/.test(id)){
rts=doc.getElementsByName(id.replace(".",""));//id=".name"
}else if(/^[\.#\w]?\w+\[.+?\]$/.test(id)){
var sidx=id.indexOf("["),tidx=id.indexOf("="),eidx=id.indexOf("]");
var nodes=__$_$__._$(id.substr(0,sidx),doc);
var t=id.substr(sidx+1,tidx-sidx-1).toLowerCase();
var v=id.substr(tidx+1).replace(/['"\]]/g,"").toLowerCase();
var tl=t.substr(t.length-1);
if(tl=="~" || tl=="!" || tl=="|") t=t.substr(0,t.length-1);
else tl="=";
if(t=="class") t="className";
for(var k=0;k<nodes.length;k++){
var att=eval("nodes[k]."+t);
if(att!=undefined){
att=att.toLowerCase();
if(att==v && tl=="="){
rts.push(nodes[k]);
}else if(att!=v && tl=="!"){
rts.push(nodes[k]);
}else if(tl=="~"){
att=" " + att + " ";
if(att.indexOf(" " + v + " ")>=0)
rts.push(nodes[k]);
}else if(tl=="|"){
att="-" + att + "-";
if(att.indexOf("-" + v)>=0)
rts.push(nodes[k]);
}
}
}
}
return rts;
},
$ : function(id,doc){
id=id.replace(/\s+/g," ").replace(/\s*([>+,])\s*/g,"$1");
if(typeof(id)!="string") return id;
if(doc==undefined) doc=document;
if(/^#[\w-]+$/.test(id)) return doc.getElementById(id.replace("#",""));
var rts=[];
var arr=id.split(",");
for(var i=0;i<arr.length;i++){
var r=/[\s>\+]/;
if(!r.test(arr[i])){
rts=rts.appendList(__$_$__._$(arr[i]));
}else{
var tems=__$_$__._parseIdString(arr[i]);
var ds=[];
for(var k=0;k<tems.length;k++){
if(k==0){
ds=ds.appendList(__$_$__._$(tems[k].val));
}else{
var _tems=[];
for(var kk=0;kk<ds.length;kk++){
if(tems[k-1].type=="n"){
_tems=_tems.appendList(__$_$__._$(tems[k].val,ds[kk]));
}else if(tems[k-1].type==">"){
var ns=__$_$__._$(tems[k].val,ds[kk]);
for(var kkk=0;kkk<ns.length;kkk++){
if(ns[kkk].parentNode==ds[kk]) _tems.push(ns[kkk]);
}
}else if(tems[k-1].type=="+"){
var _nodes=__$_$__._$(tems[k].val,ds[kk].parentNode);
var _chs=ds[kk].parentNode.childNodes;//inArray
var l=_chs.length;
var isIn=false;
for(var j=0;j<l;j++){
if(_chs[j]==ds[kk]){
isIn=true;
}
if(isIn && j+1<l){
if(_chs[j+1].tagName==undefined){
continue;
}else{
if(__$_$__.inArray(_nodes,_chs[j+1]))_tems.push(_chs[j+1]);
}
}
}
}
}
ds=_tems;
}
}
rts=rts.appendList(ds);
}
}
return rts;
}
};alert(Mit.$('#d > span').length)//试试
alert(Mit.$('#d span').length)//试试
1)根据id获取标签(id选择),返回的是唯一标签
<div id="id">获取这个标签</div>
var obj=Mit.$("#id");//注意id前必须加#
2)根据name获取标签(name选择,注:只有input标签可以使用此方式获取),返回的是标签集合
<input type='text' id='id1' name='name' value='获取这个标签'/>
<input type='text' id='id2' name='name' value='获取这个标签'/>
var inputs=Mit.$(".name");//注意name值前必须加.
//这里得到的是id1、id2两个标签,inputs[0]=id1、inputs[1]=id2;
3)根据标签名获取标签(tagname选择),返回的是标签集合
var divs=Mit.$("div");//获取所有div标签
var lis=Mit.$("li");//获取所有li标签
4)根据标签的属性获取标签(属性选择),返回标签集合
var nodes=Mit.$("div[class='css']")//获取class="css"的所有div标签,Mit.$("div[class=css]")、Mit.$('div[class="css"]')效果同等
var nodes=Mit.$("div[class!='css']")//获取class不等于css的所有div标签
var nodes=Mit.$("div[class~='css']")//获取所有class属性具有多个空格分隔的值、其中一个值等于“css”的E元素
//如<div class="css abc"/><div class="my css"
var nodes=Mit.$("div[class|='css']")//匹配所有class属性具有多个连字号分隔(hyphen-separated)的值
//其中一个值以"css"开头的E元素,主要用于lang属性,比如“en”、“en-us”、“en-gb”等等
注意:
对于a标签,如果是根据href属性进行选择,那么写法如下
var url=window.location.href + "#";//获取href="#"的超链接
var nodes=Mit.$("div a[href='" + url + "']");5)多元素选择,返回的是标签集合,多元素选择使用逗号(,)隔开
<div id="id1">获取这个标签</div>
<div id="id2">同时获取这个标签</div>
var nodes=Mit.$("#id1,#id2");
说明:不同规则之间使用半角逗号(,)隔开
6)子元素选择,返回的是标签集合(只返回第一代子元素,子元素的子元素不返回),子元素选择使用大于号(>)隔开
<div id="id">
<div>获取这个标签</div>
<div>获取这个标签</div>
<div>获取这个标签
<div>不获取子标签的子标签</div>
</div>
<p>不获取这个标签</p>
</div>
var childNodes=Mit.$("#id>div");
7)后代元素选择(包括后代的后代),返回标签集合,后代选择使用空格隔开
<div id="id">
<div>获取这个标签</div>
<div>获取这个标签</div>
<div>获取这个标签
<div>包括这个标签</div>
</div>
<p>不获取这个标签</p>
</div>
var childNodes=Mit.$("#id div");
8)相邻选择,返回标签集合(通常这个集合只包含一个元素),相邻选择使用加号(+)隔开
<div id="id">获取这个标签的相邻元素</div>
<p>获取这个标签</p>
<p>不获取这个标签</p>
var nodes=Mit.$("#id+p");
注意:这里的相邻元素一定是紧挨着的元素,以下情况将不满足匹配条件
<div id="id">获取这个标签的相邻元素</div>
<div>有一个元素隔开</div>
<p>无法获取这里的表情</p>
<p>不获取这个标签</p>
Mit.$("#id+p")将返回0个元素的集合注:id选择、name选择、tagname(标签名)选择、子元素选择、后代选择、多元素选择、相邻选择等可以组合使用
例如:
Mit.$("#first+div[class=title]")
Mit.$("#first,#first+div[class=title]")