2

HTML (contenteditable div)

<div id="board">
   <div>int main<span class="openParen bm1">(</span><span class="closeParen bm1">)</span>{</div>
   <div>if<span class="openParen bm2">(</span> <span class="openParen bm3">(</span>x>1<span class="closeParen bm3">)</span> && <span class="openParen bm4">(</span>x<10<span class="closeParen bm4">)</span> <span class="closeParen bm2">)</span></div>
   <div>statement;</div>
   <div>}</div>
</div>

行には xloop を使用し、各行内の文字には yloop を使用しています。

1.) span class2 番目の((xloop:1 yloop:7) w/cを取得するにはどうすればよいbm2ですか?

span2.) s BETWEENを取得するにはどうすればよいですか。bm2それぞれをループし、スパンのテキストを配列内に格納します。

JS

for( var x=0; x<$('#board > div ').size(); x++ ){
    var inlineDiv_num_text = $('#board > div ').eq(x).text();
    for( var y=0; y<$('#board > div ').eq(x).text().length; y++){

         kword_search = kword_search + inlineDiv_num_text.charAt(y);
         // i will detect the target paren here
          if(/(if|while|for)\s*\($/.test(kword_search)){
            //know w/c span the ( belongs to
            //get the bm span inside of it
         }
    }
}

目標:bmグループ化を配列内に格納する

 array[0] = ( (x>1) && (x<10) )
 array[1] = (x>1)
 array[2] = (x<10)
4

1 に答える 1

2

これで最初と2番目の質問に答えられると思います。

「bm2」クラスの「openParen」と「closeParen」内のスパンを提供し、テキストを配列内に格納します。(ブラケットのみがスパン内にあるため、これはブラケットのみをキャプチャします。)

var open = $('span[class="openParen bm2"]')
var spans = open.nextUntil('span[class="closeParen bm2"]')
var inside = []
$.each(spans, function(i, span){
    inside.push($(span).html())
})
alert(inside.join('-'))

例: jsFiddle

編集

「スパン タグ間」でどのように処理するかわかりません。まず、親 div 要素の html を取得し、正規表現を使用してスパンを渡します。

var allcontent = $('span[class="openParen bm2"]').parent().html()
var betweenSpan = allcontent.split(/<span class="openParen bm2">[^<]*<\/span>|<span class="closeParen bm2">[^<]*<\/span>/)[1]
var valuesArray = betweenSpan.split(/<[^>]*>/)

js配列を提供します:

[" ", "(", "x&gt;1", ")", " &amp;&amp; ", "(", "x&lt;10", ")", " "]

例: jsFiddle

間違いなくきれいではありません。

より良い解決策は、html タグの構造を再考することです (つまり、キャプチャしたい値をいくつかのタグの中に入れます!)

とにかく、それで十分です。お任せします。

于 2013-09-03T00:02:03.333 に答える