16

DOMからその属性を持つ特定のタグ要素を取得したいと思います。たとえば、

<a href="#" class="class">
  link text
</a>

文字列またはその他のオブジェクトとして<a href="#" class="class">、オプションで終了を使用して取得したいと思います。私の意見では、これは。なしで</a>を取得することに似ています。.outerHTML.innerHTML

最後に、jQueryを介して他のいくつかの要素をラップするためにこれが必要です。私は試した

var elem = $('#some-element').get(0);
$('#some-other-element').wrap(elem);

ただし.get()、そのコンテンツを含むDOM要素を返します。また

var elem = $('#some-element').get(0);
$('#some-other-element').wrap(elem.tagName).parent().attr(elem.attributes);

jQueryでは機​​能しないelem.attributes戻り値として失敗し、変換できませんでした。上記の例は、要素の一意ではなくなったIDもコピーするため、あまり意味がないことを認めています。しかし、簡単な方法はありますか?どうもありがとう。NamedNodeMapattr()

4

9 に答える 9

18

将来の Google 社員のために、jQuery を使用せずにこれを行う方法があります。

tag = elem.outerHTML.slice(0, elem.outerHTML.indexOf(elem.innerHTML));

開始タグouterHTMLの後に含まれるもののミラーが続くため、outerHTML を 0 (開始タグの開始) から innerHTML の開始位置 (開始タグの終了) までサブストリング化できます。開始タグは開始タグのみ残します!innerHTML

これは、<br>タグ、<meta>タグ、およびその他の空のタグで機能します。

tag = elem.innerHTML ? elem.outerHTML.slice(0,elem.outerHTML.indexOf(elem.innerHTML)) : elem.outerHTML;

innerHTML は自己終了タグでは空になり、indexOf('')常に 0 を返すため、上記の変更はinnerHTMLfirst の存在をチェックします。

于 2016-01-06T17:26:09.930 に答える
6
var wrapper = $('.class').clone().attr('id','').empty();
  • <a>探している要素により正確に一致するようにセレクターを変更したい場合があります。
  • clone()一致した要素の新しいコピーを作成し、オプションでイベント ハンドラもコピーします。
  • attrID が重複しないように、以前は要素の ID をクリアしていました。
  • empty()すべての子ノード (' innerHTML') を削除します。
于 2012-03-07T15:29:04.400 に答える