我循环遍历属于frag
类的span元素。我想检测我当前所处的frag元素是否是属于frag
类且属于cond
类且属于if( ((b>0) && (b<10)) || b==15 )
类的span元素的最小的儿子/孙子/ grandgrand子(从左到右)在其文本中有“if”或“else if”
contenteditable div(textarea)
<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>
HTML等效
b
(顺便说一句,我的系统就像一个代码编辑器,所以我使用的是一个有意义的div)在这里,我想检测一下我是否在3 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;
}
});
。
byossarian帮助了我:
if (validAncest.length && !$elem.nextAll('.frag').length) {
alert('target acquired');
}
找到元素的所有祖先,然后过滤一次以缩小到以'if'或'else if'开头的那些。然后将它们过滤到原始元素的父,祖父母或曾祖父母(代数&lt; 4)的那些。
要检查的条件是:
b
它检查至少有一个有效的祖先(validAncest.length)并且原始元素是其 IMMEDIATE parent 的最后一个孩子,它具有“frag”类(!$ elem。 nextAll( 'FRAG')。长度)
问题
IMMEDIATE父也应该是元素的最后一个子/孙,带有“if”或“else if”
因此,从上面的示例中,第一个b
已经提醒我应该在3日b
更新应在第二个(b<10)
而非{{1}}
答案 0 :(得分:1)
尝试使用以下内容更改validAncest
var validAncest = $elem.parents('.cond').filter(function(i){
return /^\s*(if|else\s+if)/.test($(this).text());
}).filter(function(i){
var generations = 1,
$elemCrawl = $('.frag').eq(fragNum).parent();
while ($elemCrawl[0] && $elemCrawl[0] !== this) {
if (!$elemCrawl.is(':last-child')) {return false;}
generations++;
$elemCrawl = $elemCrawl.parent();
}
if ($elemCrawl[0] && generations < 4) {
return true;
}
});
这应包括: