getElementsByAttribute
这个可以说属性选择符的JS版,用来遴选元素是适合不过。在开始之前,我们复习一下CSS2的属性选择符,JQuery高手可以跳过。 属性选择符:
当然属性值不定要用双引号,也可以用单引号,或干脆不写。属性值可以是字母,数字,或者gb2312等编码的文字,总之,平时怎样命名变量,也应该怎样命名此属性值。如,我们可以用中文来命名变量,因此同样的事出在属性值上也没有问题。如果属性值是"#"就肯定所错,因为变量名也不能这样用。不过建议尽量用英文单词。 好了,是getElementsByAttribute的表演时间了,比网上的同名函数强大得多了。传入两个参数,第一个是字符串,必选,就是CSS2的属性性选择符,由于是字符串,里面就不要加双引号与单引号了,我也懒得匹配它。第二个是元素节点,可选,用来加快查找速度,默认是document。不过自从IE8等支持querySelector与querySelectorAll后,jQuery的选择器基本只剩下半条命,也只能在IE6,IE7这些要啥没啥的非标准浏览器作威作福罢了。因此,如果检测到浏览器支持querySelectorAll,就调用该原生方法,否则就全文档遍历匹配。 Copy to Clipboard引用的内容:[www.veryhuo.com] //***********@author:司徒正美(nasami)*************//http://www.cnblogs.com/rubylouvre/archive/2009/10/26/1590102.html var getElementsByAttribute = function(search){ var tag = /([\*a-zA-Z1-6]*)?(\[(\w+)\s*(\^|\$|\*|\||~|!)?=?\s*([\w\u00C0-\uFFFF\s\-_\.]+)?\])?/, node = arguments[1] || document, agent = search.match(tag), tag = agent[1] || "*", attribute = agent[3], type = agent[4]+"=", value = agent[5], ieAttrFix = {"class": "className","for": "htmlFor"}, returnElements = [], //IE5.5不支持“*” elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag), length = elements.length; if((!!document.querySelectorAll) && type != "!="){ elements = document.querySelectorAll(search); for(var i=0,length = elements.length;i < length;i++){ returnElements.push(elements[i]); } return returnElements } if(!+"\v1") attribute = ieAttrFix[attribute] ? ieAttrFix[attribute] : attribute; while(--length >= 0){ var current = elements[length], _value = !+"\v1" ? current[attribute] : current.getAttribute(attribute); if(typeof _value === "string" && _value.length > 0){ if(!!value){ var condition = type === "=" ?//完全等于 _value === value : type === "!=" ?//不等于 _value != value : type === "*=" ?//包含 _value.indexOf(value) >= 0 : type === "~=" ?//匹配当中的某个单词,如<span class="red bold">警告</span> (" " + _value + " ").indexOf(value) >= 0: type === "^=" ?//以XX开头 _value.indexOf(value) === 0 : type === "$=" ?//以XX结尾 _value.slice(-_value.length) === value: type === "|=" ?//匹配属性值为XX或以XX-打头的元素 _value === value || _value.substring(0,value.length+1) === value+"-" : false; condition && returnElements.push(current); }else{ returnElements.push(current) } } } return returnElements; } 最后切记,如果要使用到属性值,不要把属性值用引号引起来,直接放到等于号后面即可。放一些测试页面,让大家看看如何使用此函数。
作者博客:http://www.cnblogs.com/rubylouvre/ (编辑:ASP站长网) |