4

当我从<pre>标签中删除一行时,它下面的其余行不会像使用标准<div>或任何其他元素时那样向上移动。

你可以在http://jsfiddle.net/NN6LC/看到一个例子

有没有人遇到过这个问题或知道如何解决这个问题?

4

3 回答 3

4

您正在删除跨度,但换行符仍然存在。

从技术上讲,您甚至不允许在<span>s 中包含 s <pre>

来自http://lib.ru/WEBMASTER/elements.html#PRE

允许的元素...

元素<A> <HR> <BR>和解析的字符数据。

解决方法是使用 a<div>而不是 a<pre>并在 div 上设置样式以使其看起来像 aa <pre>

编辑:其他人在下面发布了答案,然后删除了他们的答案。我不知道为什么,因为这是一个很好的答案。但这就是他们的做法:

如果您不关心<span>s 在技术上不被允许,您可以手动删除它和这样的换行符:http: //jsfiddle.net/doktormolle/KgYyp/

function removeLine() {
    var line=$('pre span.line_1');
    if(line.length) {
        if(line[0].nextSibling && line[0].nextSibling.nodeType == 3) {
            line[0].parentNode.removeChild(line[0].nextSibling);
        }

    }
    line.remove();
}

这将在删除元素之前检查元素之后的换行符,如果存在换行符,也将其删除。

于 2011-09-28T08:34:17.240 回答
2

您也必须在该行之后删除换行符。

http://jsfiddle.net/doktormolle/KgYyp/

于 2011-09-28T08:33:42.920 回答
0

多么奇怪的行为。这是一种解决方法,但我承认它并不完全令人满意。

添加以下 CSS:

pre {white-space: normal}
pre span {display: block}

有关工作版本,请参阅http://jsfiddle.net/tG8V6/ 。

于 2011-09-28T08:53:57.720 回答