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 DEMO


アップデート:

1 つの方法でそれを行うには:

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

于 2012-02-12T13:02:06.377 に答える
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 に答える
0

find()要素の子に使用してandSelf()、要素自体を取得してみてください。

于 2012-02-12T13:10:01.290 に答える