Как проверить, есть ли у html-элемента какой-либо html-тег по jquery? - PullRequest
1 голос
/ 12 февраля 2012

Дело: следует выбрать объект

пример:

function getDomPart(text,htmlTag){
    return $(text).closest(htmlTag).get(0);
}

var text1='<object>some text + html elements  </object>';
var text2='<div><object>some text + html elements  </object></div>';
alert(getDomPart(text1,'object'));
alert(getDomPart(text2,'object'));

результат должен быть: некоторые текстовые + HTML элементы но это не так.

подскажите пожалуйста что надо исправить.

Edit: пожалуйста, смотрите мой ответ с кратким решением.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2012

Ближайший ищет DOM вверх, а не вниз, как find.

Ближайшие документы:

Описание: Получить первый элемент, который соответствуетселектор, начиная с текущего элемента и продвигаясь вверх по дереву DOM.

find docs:

Описание: получить потомков каждого элементав текущем наборе соответствующих элементов, отфильтрованных селектором, объектом jQuery или элементом.

, поэтому для text1 это должно быть closest, а для text2 должно быть find:

function getDomPartUp(text,htmlTag){
    return $(text).closest(htmlTag).html();
}

function getDomPartDown(text,htmlTag){
    return $(text).find(htmlTag).html();
}

var text1='<object>some text + html elements  </object>';
var text2='<div><object>some text + html elements  </object></div>';
alert(getDomPartUp(text1,'object'));
alert(getDomPartDown(text2,'object'));​

Используйте .html, чтобы получить нужный текст.

JSFiddle DEMO


Обновление:

Чтобы сделать это одним способом:

function search(text,htmlTag){
    var $up = $(text).closest(htmlTag);

    if ($up.length > 0)
        return $up.html();

    var $down = $(text).find(htmlTag);

    return $down.length > 0 ? $down.html() :"";
}    

var text1='<object>some text + html elements  </object>';
var text2='<div><object>some text + html elements  </object></div>';
alert(search(text1,'object'));
alert(search(text2,'object'));​

JSFiddle DEMO

0 голосов
/ 13 февраля 2012

Решение, о котором я думаю: добавьте элемент-обертку, тогда можно использовать только найти:

function search(text,htmlTag){
    return  $('<div>'+text+'</div>').find(htmlTag).html();
}


var text1='<object>some text + html elements  </object>';
var text2='<div><object>some text + html elements  </object></div>';
alert(search(text1,'object'));
alert(search(text2,'object'));

Демо-версия: http://jsfiddle.net/EaZrs/5/

0 голосов
/ 12 февраля 2012

Попробуйте использовать find() для дочерних элементов и andSelf(), чтобы получить сам элемент.

...