您好,欢迎访问一九零五行业门户网

元素选择器

寥寥几行代码,实现一个简单的元素选择器,兼容低版本 ie。
自 ie8 开始已经开始支持 queryselector 和 queryselectorall 这两个十分有用的选择器函数,如果不考虑低版本浏览器,它们已经可以基本满足日常需求了。而在兼容低版本浏览器中,可以采用一些 hack 手段。
原理比较简单:通过 css rule 给我们的目标元素添加特殊属性,然后遍历所有元素找到具备特殊属性的元素,当然,找到之后,移除这些特殊属性。
var firststylesheet = document.stylesheets[0] || document.createstylesheet(); firststylesheet.addrule(query, 'barret:lee');for (var i = 0, len = document.all.length; i < len; i++) { var item = document.all[i]; item.currentstyle.barret && res.push(item);}firststylesheet.removerule(0);
比如我们要获取 .box .item a.pink元素,上面的代码是这么做的,
给所有的 .box .item a.pink元素添加 { barret: lee; }这个 css 的样式 遍历所有元素找到包含 barret 这个 css 属性的元素 移除属性 ie8 有些调皮,需要修复点小问题,源码地址:
git clone https://github.com/barretlee/miniquery npm install mini-query 代码预览:
function $(query) { var res = []; if (document.queryselectorall) { res = document.queryselectorall(query); } else { var firststylesheet = document.stylesheets[0] || document.createstylesheet(); firststylesheet.addrule(query, 'barret:lee'); for (var i = 0, len = document.all.length; i < len; i++) { var item = document.all[i]; item.currentstyle.barret && res.push(item); } firststylesheet.removerule(0); } if(res.item) { /* fuck ie8 */ var ret = []; for(var i = 0, len = res.length; i < len; i++){ ret.push(res.item(i)); } res = ret; } return res;};
其它类似信息

推荐信息