2011-04-06 85 views
8

JavaScriptは、innerHTML()関数でコンテンツを出力するときに、特定の特殊文字をHTMLエンティティに自動変換するようです。 gt38に変換せずに<と>を出力できる必要があるので、これは問題です。そして、Javascript - innerHTMLを使用して文字列を出力する* HTMLコード化された特殊文字なし*

この自動変換を防止、逆転、エスケープできますか?これまでのところ、私が何をしても、<と>は常に自動的にHTMLエンティティにエンコードされます。

例コード:

function DisplayQueries() { 
    var IDs = ['AllOpenedINC','AllOpenedCRQ','AllClosedINC','AllClosedCRQ','SameDayINC','SameDayCRQ','NotSameDayINC','NotSameDayCRQ', 
     'StillOpenINC','StillOpenCRQ','OpenOldINC','OpenOldCRQ','OtherQueuesINC','OtherQueuesCRQ'] 

    for (var i = 0; i < IDs.length; i++) { 
     if (eval(IDs[i])) 
      document.getElementById(IDs[i]).innerHTML = eval(IDs[i]); 
    } 
} 

例のクエリ変数:

AllOpenedINC = "('Company*+' = \"test\" OR 'Summary*' = \"%test%\") AND ('Submit Date' >= \"" + theDate + 
    " 12:00:00 AM\" AND 'Submit Date' <= \"" + theDate + " 11:59:59 PM\")" + nameINC; 
+0

を使用することができますか? –

+0

タグを挿入したいですか(XMLのようなもの)、次に.appendChild( "");を使うことができますか? – Guidhouse

+0

それが何であるかについての詳細は、達成したい – Guidhouse

答えて

0

私は何が起こっているのか把握しました。 innerHTMLが特殊文字をHTMLエンティティに変換するのを防ぐ簡単な方法はありませんが、DIVのコンテンツをクリップボードにコピーする際に問題が浮上していました(IEのJSだけを使用します。 IEを使用するため)、私はちょうどreplace()関数を使って、HTMLエンティティを<と>に再変換しました。

+0

ええ、innerHTMLは実際には何も変換していません。私の場合、それはものを変換していたひげ剃りテンプレートでした。 –

1

私はあなたの質問が誤った前提に基づいていると思います。この問題は、JS側ではなく、その後、正常に動作している場合代わりに、あなたの文字をエンコードHTML、システム内の他のコンポーネントを使用し、

document.getElementById("testdiv").innerHTML = '<h1><em>Hello</em></h1>'; 

:ただ非常に簡単なテストを行います。

+0

私がdocument.getElementById( "testdiv")を行っても、innerHTML = '< test >';まだ< and >をHTMLエンティティとしてエンコードします。それは実際のHTMlタグのものをスキップするようだと思われます。 – ClairelyClaire

+0

@shifuimam文字列がHTMLパーサーに直接渡され、正規のHTMLとして解釈されない文字が変換される可能性があります。 - これは、ドキュメントに壊れたHTMLを挿入する場合にのみ問題になります。あなたはその目的が何であるか尋ねることはできますか?たぶん私たちは他の解決法を提案することができます。 - あなたの最初の質問にこれを追加することができます。 – vbence

+0

元の質問に出力するテキストの例を追加しました。テキストは、<= and > = ..itのようなオペランドを使用するクエリで、エンティティに自動変換されるシンボルです。 – ClairelyClaire

1

あなたは結果として、それを行う方法ではなく、達成したいことに焦点を当てる必要があります。 innerHTML()はencode、innerText()およびtextContent()もエンコードを行います。文字列をデコードする場合は、<または> backとする必要があります。

このunescapeHTML()関数を使用して、必要に応じて結果を得ることができます。

function unescapeHTML() { 
    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&'); 
    } 

これが役立つことを願っています。 Prototypeからコピーしました。

+0

私は実際には、JSフレームワークを1つの関数のためだけに使用したくないのです。 stripTags()が実行する手動関数はありますか? – ClairelyClaire

+0

フレームワークを使用する必要はありません。フレームワークを使用せずにこの機能を使用することができます。私はあなたのためのフレームワークからそれをコピーしました。 タグ内に含めます。 – celiker

-2

あなたはいくつかのサンプルコードを投稿する(そして、あなたはそれを実行しているどのブラウザを教えて)することができjquery.append()

関連する問題