如何使用jquery将同步的html预标记组合成一个预标记?
我对如何使用jquery将同步的html预标记组合成一个预标记?,jquery,html,Jquery,Html,我对标记有问题。我的HTML编辑器将每行代码包装到单独的标记中。例如: <pre> var abc = "apple"; </pre> <pre> var def = "ball"; </pre> <pre> var abc = "apple"; var def = "ball"; </pre> $(function () { var removed = [] $("pr
标记有问题。我的HTML编辑器将每行代码包装到单独的
标记中。例如:
<pre>
var abc = "apple";
</pre>
<pre>
var def = "ball";
</pre>
<pre>
var abc = "apple";
var def = "ball";
</pre>
$(function () {
var removed = []
$("pre").each(function () {
if (removed.indexOf(this) != -1) {
return;
}
var contents = $(this).html();
var $nextpre;
while (($nextpre = $(this).next("pre")) && $nextpre.length > 0) {
contents += $nextpre.html();
removed.push($nextpre[0]);
$nextpre.remove();
}
$(this).html(contents);
});
});
var abc=“苹果”;
var def=“ball”;
我想做的是将这两个pre标记包装成一个:
var abc=“苹果”;
var def=“ball”;
包装必须是连续的
标记,因为在这些
标记块之间有其他文本
这很接近。有一个问题是.next()
跳过文本节点,因此这会合并仅由文本分隔的
块,而不是其他HTML元素。
这种方法怎么样:- 获取相邻的
pre
s对,迭代,使用self获取上一个并获取其内容,打开它们以移除pre
wrappers(对),并使用新的pre
标记包装所有(对)
$('pre')。下一个('pre')。每个(函数(){
$(本)
.prev(“pre”)
.andSelf()
.contents()
.unwrap()
.wrapAll(“”);
});
需要更多关于页面上预标记之间可能关系的信息。它们是否嵌套在某个公共元素中?它们可以随机存在于页面的任何位置吗?它们之间可以有多大的空间?pre标记可以随机存在,但它们有一个公共类。这就像编写几个代码块并在它们之间进行解释,这不会拾取文本节点。上面的代码对我来说很有用,但它并没有占用pre中包含的文本之间的新行字符tags@Anudwigna看看这个。第一个和第二个
pre
元素中有新行。这对我来说很有用。实际上,这是一个C程序,我正试图发布到我的网站上。C程序的每一行代码都由pre标记包装。我正在尝试将程序包装成一个预标记。我想问题出在我的编辑身上。是蒂尼姆斯。它将每行代码包装在pre标记中。JSFIDLE不允许在pre标记中编写C代码。您的脚本出现了一些错误,无论是否合并,输出都是相同的。我越来越接近了,但现在它删除了它合并的
,因为下一次迭代仍然在该节点上运行,因为它是原始集合的一部分。需要以某种方式跳过我看到的节点。pre标记中文本之间的新行字符不包括在内。。。合并是perfect@Anudwigna它会处理好的。。你能给我看一个提琴样本吗?事实上,这是一个C程序,我正试图发布到我的网站上。C程序的每一行代码都由pre标记包装。我正在尝试将程序包装成一个预标记。我想问题出在我的编辑身上。是蒂尼姆斯。它将每行代码包装在pre标记中。JSFIDLE不允许在pre标记中编写C代码。有一些错误
$(function () {
var $pre = $('pre + pre');
$pre.each(function () {
var $elem = $(this);
var $before = $elem.prev('pre');
$elem.contents().unwrap().appendTo($before);
});
});
$('pre').next('pre').each(function () {
$(this)
.prev('pre')
.andSelf()
.contents()
.unwrap()
.wrapAll('<pre/>');
});