1

案例:应该选择对象

例子:

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 元素,但不是。

请告诉我应该修复什么。

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

4

3 回答 3

2

最接近的是向上搜索 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 演示


更新:

用一种方法做到这一点:

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 演示

于 2012-02-12T13:02:06.377 回答
0

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

于 2012-02-12T13:10:01.290 回答
0

我了解的解决方案:添加包装器元素然后只能用于查找:

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/

于 2012-02-13T13:59:21.363 回答