在中间拆分一个textnode

时间:2012-03-27 09:30:20

标签: javascript jquery dom

我有这个小文字

<div>
Hello world<br>
this is a good<br>
text!

<br><br>

Whatever I need help<br>
so please!<br>

<br><br>
<!--    I WANT TO SELECT THE ELEMENTS AFTER THIS LINE INCLUDING TEXTNODE -->
It will be very nice<br>
when it works!

<br><br>
It will be very nice<br>
when it works!
<br><br>
</div>

你可以看到它看起来像不同的部分。

我可以通过搜索标记中的所有双<br><br>标记来找到中间位置,然后将其除以2.我创建了这个小函数:

var content = $("div").html().toString();
var middle = content.match(/<br[^>]*><br[^>]*>/g).length / 2;

我现在的问题是我不确切知道如何选择元素,包括双br标签之后的textnode。

这是标记和JS的小提琴 http://jsfiddle.net/ATbKU/

如果我只是想知道如何完成它就足够了;-)

1 个答案:

答案 0 :(得分:1)

我提出了这个不涉及切片HTML的解决方案:

var content    = $("div").contents(),
    dblBRCount = content.filter(function () {
        return this.tagName == "BR" && this.nextSibling.tagName == "BR";
    }).length,
    filterCount = 0,
    result = content.filter(function () {
        if (filterCount >= (dblBRCount / 2))
            return true;
        else if (this.tagName == "BR" && this.previousSibling.tagName == "BR")
            filterCount++;

        return false;                
    });​​​​

相反,它迭代元素的所有子节点两次,一次获得双<br>元素的数量,另一次在中间之前过滤掉所有元素,保留后面的元素。

工作演示:http://jsfiddle.net/AndyE/ATbKU/1/