如何通过jquery检查html元素是否有一些html标签?

时间:2012-02-12 12:59:19

标签: jquery jquery-traversing

案例:应该选择对象

示例:

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'));

结果应该是:一些text + html元素 但事实并非如此。

请告诉我应该修复什么。

编辑: 请通过简短的解决方案查看我的答案。

3 个答案:

答案 0 :(得分:2)

最接近的是搜索DOM,而不是像find一样搜索。

closest docs:

  

描述:获取与选择器匹配的第一个元素,从当前元素开始并逐步向上遍历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

答案 1 :(得分:0)

尝试对元素的子元素使用find(),并使用andSelf()来获取元素本身。

答案 2 :(得分:0)

我想到的解决方案:添加包装元素然后只能使用find:

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/