要素のinnerHTMLを取得した場合、特定の子要素には有効なXHTMLとしてスラッシュを付ける必要があります(たとえば、 "< br/> ")、doctypeにかかわらず、Chrome、Firefox、IEではそうではありません。自己閉じタグ(IMG、BRなど)に末尾のスラッシュを追加するための文字列処理
明らかにこれはほとんど問題ではありませんが、私のケースではテンプレートシステムの一部としてDOMからhtmlを取り除いています。そのようなバックスラッシュがない場合は、結果としてこれらのテンプレートを使用して作成されたページであり、そのページはXHTMLとして検証されません。そして検証していないページは私のクライアントを悲しいものにするようです。
だから私は適切な場所にそのバックスラッシュを追加するいくつかのJavaScriptコード(多分正規表現)を探しています。それは私には十分だこれらの要素タイプのために働いている場合:
エリア、ベース、BR、COL、埋め込み、時間、IMG、入力、リンク、メタ、PARAM
私はそれが混乱しないように持っていると思いますその場合、タグ内に引用符で囲まれた>があります。
これを行うdom-to-xmlライブラリがあることは知っていますが(http://xhtmljs.codeplex.com/)、他にもたくさんのことがあり、非常に力強いものです。私はもっと簡単なことを望んでいる。
編集:
すべての権利、私は文字列処理のアプローチ上の任意刺さを取得しなかったので、私は先に行って、私のためのトリックを行います何かをしました。 (それは私が後で対処よ引用符で>によって混乱になるだろうが):
var addClosingSlashes = function (htmlString) {
var elemTypes = [
"area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param"];
var inString, outString = htmlString;
for (var i=0; i<elemTypes.length; i++) {
var index1 = 0, index2;
inString = outString;
outString = '';
while ((index1 = inString.indexOf("<" + elemTypes[i])) != -1) {
if ((index2 = inString.indexOf(">", index1)) != -1 && inString.substring(index2 - 1, index2 + 1) != '/>') {
outString += inString.substring(0, index2) + " />";
inString = inString.substring(index2+1);
}
else {
break;
}
}
outString += inString;
}
return outString;
};
はありがとうございました!私はajaxリクエストからHTMlを引っ張ってDOMに追加した後、ユーザーがGUIでビットとピースを編集し、それをテキストエリアにドロップして、それをsalesforceにコピー/ペーストすることができるページを構築していますそれらの自己閉じスラッシュが存在しない場合にはエラーをスローします。あなたの小さな機能は、私が行く必要があった場所(または少なくとも80%の道)に私が行ってしまった。 –
@SimonJensen聞こえていいよ。 – rob