Как мы пишем это в javascript $ (this) .parent ('p') - PullRequest
2 голосов
/ 26 октября 2011

Как мне написать этот селектор в простом JavaScript

$(this).parent('p')

Ответы [ 4 ]

5 голосов
/ 26 октября 2011

Поскольку функция 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');
3 голосов
/ 26 октября 2011
var p = this.parentNode;
var result = []; // empty
if (/p/i.test(p.nodeName))
   result = [p]; // return in jQuery array format (or not)
1 голос
/ 26 октября 2011
( node = theObject.parentNode ).tagName == "P" ? node : false;
1 голос
/ 26 октября 2011

Эта функция должна делать это:

 var getAncestorOfTagType = function (e, type) {
    while (e.parentNode && e.tagName != type)
      e = e.parentNode;
    return e; 
 }

затем

var p = getAncestorOfTagType(this, 'P')
...