我正在循环属于frag
类的跨度元素。frag
我想检测我当前所在的 frag 元素是否是属于class 和属于cond
class 并且具有“if”或“else if”的 span 元素的最小儿子/孙子/孙子(从左到右)在其文本中
内容可编辑的 div (textarea)
if( ((b>0) && (b<10)) || b==15 )
等效的 HTML
<div id="board">
<div>
<span class="frag cond">if<span class="openParen bm1">(</span> <span class="frag cond"><span class="openParen bm2">(</span><span class="frag cond"><span class="openParen bm3">(</span><span class="frag">b</span>>0<span class="closeParen bm3">)</span></span> && <span class="frag cond"><span class="openParen bm4">(</span><span class="frag">b</span><10<span class="closeParen bm4">)</span></span><span class="closeParen bm2">)</span></span> || <span class="frag">b</span>==15 <span class="closeParen bm1">)</span></span>
</div>
</div>
(顺便说一下,我的系统就像一个代码编辑器,所以我使用了一个可内容编辑的 div)在这里,我想检测我是否在 3 号b
。
byossarian帮我解决了这个问题:
var $elem = $('.frag').eq(fragNum);
var validAncest = $elem.parents('.cond').filter(function(i){
return /^\s*(if|else\s+if)/.test($(this).text());
}).filter(function(i){
var generations = 0,
$elemCrawl = $('.frag').eq(fragNum);
while ($elemCrawl[0] && $elemCrawl[0] !== this) {
generations++;
$elemCrawl = $elemCrawl.parent();
}
if ($elemCrawl[0] && generations < 4) {
return true;
}
});
找到元素的所有祖先,然后过滤一次以缩小到以“if”或“else if”开头的元素。然后,它将这些过滤为原始元素的父、祖父母或曾祖父母(世代 < 4)。
检查的条件是:
if (validAncest.length && !$elem.nextAll('.frag').length) {
alert('target acquired');
}
它检查至少有一个有效的祖先 (validAncest.length) 并且原始元素是它的IMMEDIATE具有类“frag”的父元素的最后一个子元素 (!$elem.nextAll('.frag').length)
问题
IMMEDIATE parent 也应该是带有“if”或“else if”的元素的最后一个子/孙子
所以从上面的例子中,第一个b
已经给了我第三个应该在哪里的警报b
UPDATE应该在第二次b
而不是在(b<10)