JavaScript-javascript怎么实现jquery的范围选择

发布于 2016-11-15 18:29:11 字数 202 浏览 1272 评论 2

jquery可以实现在dom的某个范围内选择,比如
$('#id1 #id2'),首先限定查找范围为id为id1的元素内部,然后再在这个范围内查找id为id2的元素,如果整个页面内有多处id为id2的元素,这样选择不会选择到其他元素去。
虽然用jquery做这样的选择很好实现,但是现在条件所限,必须脱离jqury,想要用原生javascript实现同样的功能,怎么做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜柠檬 2017-08-02 06:01:23

function query(str) {
var tags = str.split(" ");
var dom = [];
var nodesToArray = function(nodes) {
var arr = [];
for(var i in nodes) {
arr.push(nodes[i]);
}
return arr;
}
for(var i = 0; i < tags.length; i ++) {
if(/#w+/i.test(tags[i])) {
dom.push(document.getElementById(tags[i].substring(1)));
}
else if(/.w+/i.test(tags[i])) {
if(dom.length == 0) {
var all = document.getElementsByTagName("*");
}
else if(dom[dom.length - 1] instanceof Array) {
var all = [];
for(var j in dom[dom.length - 1]) {
var nodes = dom[dom.length - 1][j].getElementsByTagName("*");
all = all.concat(nodesToArray(nodes));
}
}
else {
var all = dom[dom.length - 1].getElementsByTagName("*");
}
//selected elements
var selelm = [];
var reg = new RegExp("b" + tags[i].substring(1) + "b");
for(var k in all) {
if(all[k].nodeType != 1) continue;
if(reg.test(all[k].className)) {
selelm.push(all[k]);
}
}
dom.push(selelm);
}
else if(/w+/i.test(tags[i])) {
if(dom.length == 0) {
var allTags = document.getElementsByTagName(tags[i]);
allTags = nodesToArray(allTags);
}
else if(dom[dom.length - 1] instanceof Array) {
var allTags = [];
for(var j in dom[dom.length - 1]) {
var nodes = dom[dom.length - 1][j].getElementsByTagName(tags[i]);
allTags = allTags.concat(nodesToArray(nodes));
}
}
else {
var allTags = dom[dom.length - 1].getElementsByTagName(tags[i]);
allTags = nodesToArray(allTags);
}
dom.push(allTags);
}
}
if(dom[dom.length - 1].constructor != Array) return new Array(dom[dom.length - 1]);
return dom[dom.length - 1];
}

使用很简单,和jquery里一样,当然没有jquery那样强大,用法:

query("#top div")//选取id为top的所有div子元素
query(".p div")//选取所有class为p的所有div子元素

注意,返回的永远是数组,查找不到会返回空数组。
运行若有bug,可以共同修改

虐人心 2017-02-28 12:55:11

id本就不应该在页面中重复,出现这个问题说明很差劲。

var q = function (strId1, strId2) {
var id1 = document.getElementById(strId1), id1Chidlren = id1.getElementsByTagName('*'), i = 0, len = id1Chidlren.length, id2 = null;

for (; i < len; ++i) {
if (id1Chidlren[i].id === strId2) {
id2 = id1Chidlren[i];
break;
}
}

return id2;
};

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文