2016-09-16 22 views
0

テキスト(XMLタグを含む)を解析し、HTMLスパンのタグの一部を特定のクラス(置き換える)に置き換える必要があります。 スパン出力に1つのクラスだけを追加するとうまくやることができますが、複数のクラスを追加すると完全に壊れます。式をHTMLタグに置き換える

私が代わりに私がちょうど連結しようとしている、二つの「クラス」の属性(私はこれが機能しないことを知っている)を作成しようとしていないよ:"<span=\"en " + class + "<\"/span>"enが最初のクラスであり、classは、文字列変数です。

このenクラスを追加する必要がないときには、\"を使用しませんでした。"<span= " + class + "</span>"と入力するだけで正常に動作しました。私は実際になぜこれがうまくいかなかったのか、なぜなら私にとっては"<span class=x> y </span>がHTMLで生成され、クラス属性は("の不在のために)動作しませんでしたが、何らかの理由で動作します理由を理解するのが大好き)。

t
text = text.replace(exp, t); 
document.getElementById("myid").innerHTML = text; 

は、私は上記と連結したものです:

私はHTMLにこの<span>を追加する方法が置き換えています。置き換えるXMLタグが複数あるので、私は(exp.exec(text) == null)までこれをしばらく繰り返していますが、問題はそこにあるとは思えません。

誰かが私に行方不明を説明することができますか?私はJSをとてもよく理解しておらず、何が起こっているのかも知りません。私は、私のコードの別の全く別の部分を壊しているので、私がやっていることの意味は何かについて説明したかったのです...置換はまだ働いています(出力は<span class="en x"> y </span>です)。しかし、部。

私が作成した唯一の変更は<span class="x"> y </span>から<span class="en x"> y </span>だったので、これは私のコードの中の他のものには影響しません(私は説明します)。私は、そのエスケープされた引用符とは何かがあると強く信じていますが、私はこれらの引用符なしでこの作業を行う方法はわかりません。

壊れた部分は次のとおりです。 私は、テキストをフォームのテキストエリアに読み込んでいます。このテキストはXMLです。私の機能を有効にする「ビジュアルモード」ボタンがあります(テキスト全体を読み込み、XMLタグを色付きのスパンで置き換えます)。今はすべてが大丈夫です。しかし、その後、ユーザーはテキストエリアに戻り、テキストの内容を編集して、例えば、より多くのタグ付き単語を追加することができる。もう一度 "ビジュアルモード"をクリックしてください。 1つのクラスを追加していたときに解析がうまくいった。

しかし、私がその変更を加えた後、解析はXMLタグを認識することができず、そのままテキストをそのまま貼り付けて貼り付けます。明らかにすべてが故障する。私が理解していないのは、テキストの読み方や、テキストの置き換え方法を変更しなかったため、解析が機能しなくなった理由です。私は読んだところから同じ場所のテキストを置き換えることさえないので、あるものは別のものに影響を与えるべきではありません。

EDIT: 私のXMLは次のようになります。

<DOC DOCID="someid"> 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Aliquam at mauris <EM ID="someid" CATEG="somecateg">pellentesque </EM>, scelerisque purus condimentum, scelerisque purus. 
<EM ID="someid" CATEG="anothercateg">Mauris </EM>id libero vitae nulla fringilla vehicula. 
Integer varius <EM ID="someid" CATEG="somecateg">lorem in </EM>nibh hendrerit facilisis. 
Nulla porttitor dui a lacus euismod bibendum. 
Proin in arcu eu magna laoreet suscipit id eget quam. 
</DOC> 

XMLの内容は、最初のテキストエリア(コード怒鳴るのid "MYID")にロードされ、その後、後に操作されます。

私は何をやっていることは次のとおりです。

var exp = /<EM (.*?) <\/EM>/; 
var text = document.getElementById("myid").value; 
while(exp.exec(text) != null) 
{ 
    var exp1 = /<EM ID=(.*?)<\/EM>/; 
    var text1 = exp1.exec(text); 
    var exp2 = /CATEG=\"(.*?)\"/; 
    var text2 = exp2.exec(text1[1]); 
    var categ = text2[1]; 
    var exp3 = /\">(.*?) <\/EM>/; 
    var text3 = exp3.exec(text); 
    var word = text3[1]; 
    var tag = "<span class="; 
    var tag2 = ">"; 
    var tag3 = "</span> "; 
    var t = tag + categ + tag2 + word + tag3; 
    text = text.replace(exp, t); 
} 
document.getElementById("myid2").innerHTML = text; 

だから私はタグから私が欲しい情報を抽出して、その後、(CSS経由)に応じてフォーマットされている対応するクラス、とのスパンのためにそれらを交換してください。私が行うすべての変更はテキストエリアに反映されず、代わりにdiv(idは上記のコードでは "myid2")に入れられていることに注意してください。ただし、テキストエリアに加えられた変更はこのdivに反映されます。したがって、ユーザーは単語を追加したり(タグ付けされているかどうか)、何かを削除することができます。

私の記事で述べたように、問題は2つのカテゴリを入れようとするときです。私のコードであるため、var tag = "<span class=";が正常に動作している、と私は、コードを変更するときに問題が発生します。

var tag = "<span class=\"en "; 
var tag2 = "\">"; 

何が起こるかである私は、最初の「ビジュアルモード」ボタンの上に(私の機能をトリガーボタン)をクリックしたときすべてのタグが正しく解析されてフォーマットされますが、テキストエリアの内容を変更してVisualモードをもう一度クリックしようとすると、編集が始まる直後にパーサーが破損します。タグの認識を停止し、すべてのXMLタグをdivにスローします。 <em>自体はHTMLタグなので、すべてがイタリックになります。私が理解できないのは、私がスパンを追加したdivから読み込んでいないので、引用符を追加すると私の解析が損なわれる理由です。彼らは全く関係がありません。

2枚目の原稿のポストの下で私のコメントパー
+0

コードの実際の例、XMLの見え方、タグへの変換などを挙げてください...他の賢明な方法は、あなたの問題の本当のイメージを作るのは難しいです。 –

+0

OK!この情報を投稿に追加しました。 – user2980149

+0

jQueryでは、 '.html()'メソッドは生のHTMLを中断することなく出力しますが、代わりに組み込みも組み込まれています。私はあなたが複数の変数を持つ 'while'ステートメントの代わりにそのアプローチを調べることをお勧めします。 –

答えて

1

、「むしろより引用して、このようなエスケープ、単一引用符、二重引用符のメソッドを使用します。シングルはほとんど起動と終了outterし、すべての子供のための二重内。

代わりに:

var tag = "<span class=\"en "; 
var tag2 = "\">"; 

例:私はこれが多くのプロの間で正常に動作信じて

var tag = '<span class="en "'; 
var tag2 = '>'; 

文法言語。

関連する問題