我如何获得文本所属的span类ID?

时间:2013-09-02 22:43:38

标签: javascript jquery

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 class的{​​{1}}(xloop:1 yloop:7)w / c是(

2.。)我将如何获得bm2 BETWEEN span,我将在每个中循环并将跨度的文本存储在数组中

JS

bm2

目标:将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

1 个答案:

答案 0 :(得分: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

修改

不确定你在span标记之间的做法“,我首先获取父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标记的结构(即将要捕获的值放在某些标记内!)

无论如何,这就够了,我会留给你。