2011-07-08 9 views
4

要素の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; 
    }; 
+1

はありがとうございました!私はajaxリクエストからHTMlを引っ張ってDOMに追加した後、ユーザーがGUIでビットとピースを編集し、それをテキストエリアにドロップして、それをsalesforceにコピー/ペーストすることができるページを構築していますそれらの自己閉じスラッシュが存在しない場合にはエラーをスローします。あなたの小さな機能は、私が行く必要があった場所(または少なくとも80%の道)に私が行ってしまった。 –

+0

@SimonJensen聞こえていいよ。 – rob

答えて

1

を、これはサーバー側のjavascriptのでない限り、これは何もしません。ブラウザがjavascriptを実行するときには、DOMはDOMとして構築され、テキスト要素のようなものではありません。つまり、要素は既にツリーに組み込まれており、レンダリングに影響するために何もできません。

+0

ええ、あなたはおそらく私がやろうとしていることを逃したり、誤解したりしました。私はdomからhtmlを抜き出し、それを使って(php)Webアプリケーションでテンプレートを生成するjavascriptアプリケーションを持っています。だから、「テンプレート文書」から出てくる要素のinnerHTMLになければ、php生成ページには存在しないという意味で、末尾のスラッシュは重要です。 – rob

1

は、ソースドキュメントはこの質問に答えあたりを務めている方法を変更してみてください:When objects (e.g. img tag) is created by javascript, it doesn't have the closing tag. How do I make it W3C valid?また

は、この質問の答えを参照してください... :-) RegEx match open tags except XHTML self-contained tags

+0

+1は究極の解答を参照します。 –

+0

ありがとうございます。うわー、私はそれを ".xhtml"という名前に変えれば、私のjavascriptは実行されません。 Errgh。正直言って、私はちょうどそれらの後ろにスラッシュが好き私のクライアントを満足させるためにこれをやっています、そして、私はそれらを得るために唯一の方法がいくつかブルートフォースストリング処理であるように見えます。 – rob

+0

まず、実際にXHTMLであることを確認するために、バリデーターを通してXHTMLを実行します。次に、JavaScriptがidの要素を参照していることを確認します。document.someParentThing.myIDではなくdocument.getElementById( "myID") –

関連する問題