スクリプトタグ、プレーンテキストなどのHTML文字列があるとします。HTMLの文字列を指定すると、アンカーのHTMLタグのみを取り除く最も良い方法は何ですか?
<a>
タグのみを削除するにはどうすればよいですか?
ここではいくつかの方法を使用していますが、これらはすべてのタグ用です。 Strip HTML from Text JavaScript
スクリプトタグ、プレーンテキストなどのHTML文字列があるとします。HTMLの文字列を指定すると、アンカーのHTMLタグのみを取り除く最も良い方法は何ですか?
<a>
タグのみを削除するにはどうすればよいですか?
ここではいくつかの方法を使用していますが、これらはすべてのタグ用です。 Strip HTML from Text JavaScript
:
var content = $('<div>' + htmlString + '</div>');
content.find('a').replaceWith(function() { return this.childNodes; });
var newHtml = content.html();
を包む<div>
タグを追加するには、私たちが戻って必要なHTMLを取得することができます。
私のブログにmore detailed explanationと書いてあります。
これにより、エレメントのいずれかにアタッチされたイベントハンドラーを破るなどの予期しない副作用が発生することがあります。 – eyelidlessness
@eyelidlessness:彼は_string_を持っています。イベントハンドラはありません。彼は文字列を持っていなかった、固定されていた。 – SLaks
@SLaks、それを指摘してくれてありがとう、私はそれを逃した。誰かがDOM構造内で同じことを達成しようとしている場合のために、私は別の答えで別のアプローチを提供しました。 – eyelidlessness
は< >タグはそれほど単純ではungreedy regexpはトリックを行うだろう、他の< >タグを保持する(すなわちstring.match(/<a>(.*?)<\/a>/)
を、この例では、タグは何の属性を持っていないと仮定)想定されていません。 jQueryのを使用して
これは実際のタグと一致しません。また、閉じられていない ''タグも有効なHTMLです。 (XHTMLと対照的に) – SLaks
このアプローチでは、既存のDOMノードが保持され、イベントがアタッチされているアンカー内に要素がある場合、副作用が最小限に抑えられます。
(jQueryを使って)を使用するfunction unwrapAnchors() {
if(!('tagName' in this) || this.tagName.toLowerCase() != 'a' || !('parentNode' in this)) {
return;
}
var childNodes = this.childNodes || [], children = [], child;
// Convert childNodes collection to array
for(var i = 0, childNodes = this.childNodes || []; i < childNodes.length; i++) {
children[i] = childNodes[i];
}
// Move children outside element
for(i = 0; i < children.length; i++) {
child = children[i];
if(('tagName' in child) && child.tagName.toLowerCase() == 'a') {
child.parentNode.removeChild(child);
} else {
this.parentNode.insertBefore(child, this);
}
}
// Remove now-empty anchor
this.parentNode.removeChild(this);
}
:
$('a').each(unwrapAnchors);
(jQueryのなし)を使用するには、次のパフォーマンスが懸念される場合
var a = document.getElementsByTagName('a');
while(a.length) {
unwrapAnchors.call(a[a.length - 1]);
}
'var elem = arguments [0] ||この ' – SLaks
@SLaksは、jQueryで使用され、' el'がイテレータになります。 – eyelidlessness
はここでネイティブ(非ライブラリー)ソリューションです。
function stripTag(str, tag) {
var a, parent, div = document.createElement('div');
div.innerHTML = str;
a = div.getElementsByTagName(tag);
while(a[0]) {
parent = a[0].parentNode;
while (a[0].firstChild) {
parent.insertBefore(a[0].firstChild, a[0]);
}
parent.removeChild(a[0]);
}
return div.innerHTML;
}
はこのようにそれを使用します。
alert(stripTag(my_string, 'a'));
あなたがタグの内容を保存しますか? – SLaks