html dom取父节点jq,做一个类似JQuery获取DOM对象的$()

在dom操作时,有时根据id获取单个对象、有时根据className获取多个对象。平常可能我们用两个函数来实现这两个功能。不过我将它们整合了一下,目前使用情况良好,函数如下:

// 根据selector获取单个或多个元素,

// 获取多个元素时,可以指定元素的tag类型和父元素

function $(selector, tag, parent) {

var ret = [];

//没有传递selector,返回空

if (!selector) { return null; }

//selector为一个dom元素,返回它

//若为文本元素,返回空

if (selector.nodeType) {

return selector.nodeType == 3 ? null : selector;

}

//如果为一个元素组成的数组或nodeList对象

//如:[dom1,dom2,dom3]或 node.childNodes等情况时

if (selector.length && selector.constructor != String) {

ret = Array.prototype.slice.call(selector, 0, selector.length);

//过滤掉非元素、文本节点、tagName不为tag的结点

for(var i=0; i < ret.length; i++) {

if (!ret[i].nodeType || ret[i].nodeType == 3) { ret.splice(i,1); i--; }

else if (tag && ret[i].tagName.toLowerCase() != tag.toLowerCase()) {

ret.splice(i,1);

i--;

}

}

return ret;

}

//如果selector为一个字符串

if (selector.constructor == String) {

// 若字符串以.开头,表示按className获取元素

if (/^\.\w+/.test(selector)) {

parent = parent || document;

tag = tag || "*";

nodes = parent.getElementsByTagName(tag);

var className = selector.replace(".", "");

var reg = new RegExp("(^|\\b)" + className + "(\\b|$)");

for(var i=0; i < nodes.length; i++) {

if(reg.test(nodes[i].className)) { ret.push(nodes[i]); }

}

return ret;

}

//否则按ID方式获取对象

return document.getElementById(selector);

}

// 传入的selector有错误

return null;

}

下面它的使用方法,为了配合演示,请先准备如下HTML结合代码:

Hello,world!

Hello,world!

afasdfsasfksdklfajsfjkendof
  1. 附加的第一项
  2. 附加的第二项
  3. 附加的第三项

上面的代码结构只是为测试而写的,所以比较的另类……勿怪!!!

返回到$函数,它具有如下一些功能:

$() : 返回null;

$("id") :返回单个对象,如下:alert ( $("test") ); // object HTMLUListElement

$(".t") :返回所有className为t的元素组成的数组,如下:alert ( $(".t").length ); //7,共有7个元素的className为t,有木有?

$(".t", 'li') :返回className为t的li标签对象,如下:alert ( $(".t", 'li').length ); // 6,有一个

的类样式也是t,但是被排除了

$(".t", "li", $("test")):返回ID为test的元素下的

且类样式为t的对象,如下:alert ( $(".t", 'li', $("test")).length ); // 3,范围在test之内

$($("test").childNodes) : 将test的子元素组合成一个数组,并过滤掉文本节点,如下:alert ( $($("test").childNodes).length ); //共7个

$($("test").childNodes, 'p') : 获取test的子元素中为

的那些元素,如下:alert ( $($("test").childNodes, 'p').length ); // 2,刚好两个

还可以传递一个数组,如下:

var arr = [1,2,3,document, document.body];

alert ( $(arr).length ); //2 。1,2,3被忽略

另外,$与$结合使用的话,就会更加的方便了。以上只是我个人在使用的一个函数,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值