2
<div>something i need</div>

<span>x</span>

<div>something i need</div>

<span>x</span>

<div>something i need</div>

<span>x</span><span>x</span><span>x</span>

<div>something i need</div>

在我有 3 个跨度元素的行上,如何删除除一个之外的所有元素?我只想在每个元素之间有一个。

编辑:使 html 正确,因此人们专注于实际问题。

4

3 回答 3

1
$('span').each(function() {
    while($(this).prop('tagName') == $(this).next().prop('tagName'))
        $(this).next().remove();
});

如您所见,连续跨度已被删除,xdiv 之间只有一个而不是三个:http: //jsfiddle.net/samliew/KFMrU/

将上述元素包装在一个容器中是一个很好的做法,并且只在该容器中执行删除。IE:

$('#myDiv span').each(function() {
于 2013-05-10T09:14:00.173 回答
0

在这里你有小提琴:http: //jsfiddle.net/SbpzY/

$('div').each( function() {
    if(!$(this).prev().hasClass('a'))
        $(this).remove();
});

将使用以下html:

<span class="a">something i need</span>

<div>x</div>

<span class="a">something i need</span>

<div>x</div>

<span class="a">something i need</span>

<div>x</div><div>x</div><div>x</div>

<span class="a">something i need</span>
于 2013-05-10T09:15:44.790 回答
0

正则表达式

假设 HTML 元素直接在<body>then 正则表达式中反向引用也可以去除连续的重复,这里由 jQuery 提供便利:

const jqContainer = jQuery("body");
jqContainer
    .html(
        jqContainer
            .html()
            .replace(/(<span>[^<>]+<\/span>)+/g, "$1")
    )
;

注意:在这种情况下,正则表达式匹配所有<span>包含文本的连续重复元素,无论该文本是什么。如果您想与<span>其中的特定文本匹配,则替换[^<>]+为要替换的文本,例如x

CSS

以下内容可能不适用于此上下文,但如果目标是删除连续重复元素以进行演示,并且如果 CSS 适用,则以下 CSS 将停止显示连续重复跨度:

span + span {
    display: none;
}
于 2019-09-02T14:57:56.530 回答