jquery - 选择标签中的部分文本

标签 jquery dom

DOM结构如下所示(现有网站...无法修改它):

<table>
<tr><td>
<br><hr size="1"><strong>some heading 1</strong><br>
<br>some text 1<br>

<br><hr size="1"><strong>some heading 2</strong><br>
<br>some text 2<br>
</td></tr>
</table>

我想操纵它,使其看起来像这样

<table>
<tr><td>
<br><hr size="1"><strong>some heading 1</strong><br>
<br>some text 1<br>
</td></tr>
<tr><td>
<br><hr size="1"><strong>some heading 2</strong><br>
<br>some text 2<br>
</td></tr>
</table>

使用发布的解决方案 here ,我能够获取 hr、strong、br 标签并将它们移动到新的 td 元素中。但是,我无法获取“some text 1”,因为它直接包含在 td 中,并且在 td 上使用 .text() 会给我“some text 1”和“some text 2”。

有什么想法吗?

最佳答案

您可以使用 .contents() 收集所有子节点,包括文本节点。以下代码搜索第二个 hr(为了稳健)并将前面的 br 和后面的所有内容移动到新创建的 td。我已经在 google chrome 中测试过它。

$('table tr td').each(function() {
    var firtHrSeen = false;
    var indexOfSecondHr = -1;
    var allChildren = $(this).contents();
    allChildren.each(function(index) {
        if ($(this).is('hr')) {
            if (firtHrSeen) {
                indexOfSecondHr = index;
                return false; // break out of each()
            } else {
                firtHrSeen = true;
            }
        }
    });

    if (indexOfSecondHr != -1) {
        var newTd = ($('<tr><td></td></tr>').insertAfter(this.parentNode))[0].firstChild;
        allChildren.slice(indexOfSecondHr - 1).each(function(index) {
            newTd.appendChild(this);
        });
    } else {
        // not found. something went wrong
    }
}); 

关于jquery - 选择标签中的部分文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2744153/

相关文章:

javascript - 如何获取表 <td> 中选定的 <option> 值的数组

javascript - 使用 javascript 加载 css 文件

Java+DOM : How do I elegantly rename an xmlns:xyz attribute?

javascript - 如何查找添加了自定义事件监听器的位置?

javascript美元符号变量不起作用

javascript - 附加到 div,而不是正文

jquery - 自动调整动态文本大小以填充固定大小的容器

javascript - g :message with arguments inside Javascript/jQuery not working as expected

jquery - 在 jQuery 中调用带有两个类的 div

javascript - 全日历 + FancyBox2 : Passing and setting input value