0

我正在循环属于"frag"类的跨度元素。我想检测我当前是否在

  1. 其类名上有“cond”的父级
  2. 该父级包含文本“if”或“else if” 并且
  3. 当前的 frag 是在 no.1 和 no.2 有资格的父母的最后一个孩子

(顺便说一下,我的系统就像一个代码编辑器,所以我使用了一个可内容编辑的 div)在这里,我想检测 imb是否符合 no.1,2 和 3 的要求。

内容可编辑的 div (textarea)

if( (b>3) && b<10)

我所做的并不介意循环。我不知道如何构建条件。

if( $('.frag').eq(ctr).parent().hasClass('cond') && /(?:if|else\s+if)/g.test$('.frag').eq(ctr).text() && $('.frag').eq(ctr).lastChildOfParent ) 

HTML

<div id="board">
  <div>
  <span class="frag cond">if <span class="openParen bm1">(</span> <span class="frag cond">(<span class="frag">b</span>&gt;3) </span> && <span class="frag">b</span>&lt;10 <span class="closeParen bm1">)</span></span>
  </div>
</div>

UPDATE1( :为and添加了 span-wrap )。这使得)最后一个孩子。

更新2:我的意思是父母,它可以是直系父母、祖父母或祖祖父母。这样就不会像 if( (b>3) && ((c>1)||(b<10)) 之类的 contenteditable div 中的文本出现问题

因为当我在最后一个片段中时,b我不会在我的直系父母中找到“if”或“else if”(b<10)

4

2 回答 2

2

测试是否是最后一个孩子

$('.frag').eq(ctr).is(function(){
    var $this = $(this), fragsibs = $this.siblings('.frag').addBack();
    return fragsibs.last().is(this) && /^(if|else \s+if)/.test($this.text())
});
于 2013-09-16T10:58:25.697 回答
1

你似乎有(1)和(2)好的,所以对于(3),试试:

$elem.nextAll('.frag').length === 0

$elem您正在测试的元素的 jQuery 对象在哪里。

见:http ://api.jquery.com/nextAll/

所以,总的来说,你会想要这样的东西:

var $parent = $elem.parent();

if ($parent.hasClass('cond') && /^\s*(if|else\s+if)/.test($parent.text()) && !$elem.nextAll('.frag').length) {
    // do things
}

我唯一不确定的是正则表达式,因为我不是 100% 你想要的。我“if”或“else if”开始。

更新:如果我了解您的更新,请尝试:

var validAncest = $elem.parents('.cond').filter(function(i){
    return /^\s*(if|else\s+if)/.test($(this).text());
});
// this finds all ancestors with class 'cond' and 
// whose containing text starts with 'if'/'else if'

if (validAncest.length && !$elem.nextAll('.frag').length) {
    // do things
}

更新 2:如果您需要计算祖先中后代的深度,您可以使用:

function childDepth ($elem, $ancestor) {
    var generations = 0;

    while ($elem[0] && $elem[0] !== $ancestor[0]) {
        generations++;
        $elem = $elem.parent();
    }

    if ($elem[0]) {
        return generations;
    }
}

$ancestor如果是 的父母,则返回 1 ,如果是$elem祖父母,则返回 2 等;undefined如果它$ancestor实际上不是$elem.

于 2013-09-16T12:16:48.883 回答