如何在普通javascript中编写此选择器
$(this).parent('p')
答案 0 :(得分:5)
由于jQuery .parent(selector)
函数只检查直接父级,因此可以创建如下函数:
function getParent(o, tag) {
if (o.parentNode.tagName.toLowerCase() == tag.toLowerCase()) {
return(o.parentNode);
} else {
return(null);
}
}
然后,你可以这样称呼:
getParent(this, 'p');
或者,如果你想让它返回一个类似于jQuery的数组,你可以使用它:
function getParent(o, tag) {
var results = [];
if (o.parentNode.tagName.toLowerCase() == tag.toLowerCase()) {
results.push(o.parentNode);
}
return(results);
}
然后,你可以调用它(并获得一个数组):
getParent(this, 'p');
如果你想要返回与标记类型匹配的所有祖先的jQuery .parents(selector)
函数的等效函数,你可以使用它:
function getParents(o, tag) {
var results = [];
while ((o = o.parentNode) && o.tagName) {
if (o.tagName.toLowerCase() == tag.toLowerCase()) {
results.push(o);
}
}
return(results);
}
而且,你会这样称呼它:
getParents(this, 'p');
答案 1 :(得分:3)
var p = this.parentNode;
var result = []; // empty
if (/p/i.test(p.nodeName))
result = [p]; // return in jQuery array format (or not)
答案 2 :(得分:1)
此功能应该这样做:
var getAncestorOfTagType = function (e, type) {
while (e.parentNode && e.tagName != type)
e = e.parentNode;
return e;
}
然后
var p = getAncestorOfTagType(this, 'P')
答案 3 :(得分:1)
( node = theObject.parentNode ).tagName == "P" ? node : false;