Javascript DOM中有很多空行

Javascript DOM中有很多空行,javascript,jquery,Javascript,Jquery,当我阅读此代码段末尾的.html时,我得到以下结果: " <div style="left: 0px;" class="text">Test1</div><div style="left: 1px;" class="text">Test2</div><div style="left: 2px;" class="text">Test3</div>" .text{位置:绝对;} 测试1 测试2 测试3 无需拆离和附加图元

当我阅读此代码段末尾的.html时,我得到以下结果:

"



<div style="left: 0px;" class="text">Test1</div><div style="left: 1px;" class="text">Test2</div><div style="left: 2px;" class="text">Test3</div>"
.text{位置:绝对;} 测试1 测试2 测试3
无需拆离和附加图元即可更改其样式。您基本上是在累积顶部元素之间的所有空白,并将所有元素移动到空白之下

如果您的HTML看起来像这样,则问题不会出现:

<div id="blah"><div class="text" >Test1</div><div class="text" >Test2</div> <div class="text" >Test3</div></div>
真正的问题是:

因为真正的问题是使用detach和append来避免触发转换延迟样式,所以真正的解决方案是从元素中删除一个特定的转换类,对其进行更改,然后重新添加该类

e、 g.创建一个具有转换样式的新转换类:

.transitions{
     transition-duration: 0.2s;
}
确保所有文本元素都具有所需的类。然后您的代码变成:

$(".text").each(function(i) {
   // Remove the transitions styling class
   $(this).removeClass('transitions');

   // Change the layout without transitions
   this.style.left = Math.random() * 10 + 'px'; this.style.top = i*10 + 'px'; 

   // Restore the transitions styling class
   $(this).addClass('transitions');
});

这比分离和附加DOM元素快得多,并且不会移动空格。

您不需要分离和附加元素来更改其样式。您基本上是在累积顶部元素之间的所有空白,并将所有元素移动到空白之下

如果您的HTML看起来像这样,则问题不会出现:

<div id="blah"><div class="text" >Test1</div><div class="text" >Test2</div> <div class="text" >Test3</div></div>
真正的问题是:

因为真正的问题是使用detach和append来避免触发转换延迟样式,所以真正的解决方案是从元素中删除一个特定的转换类,对其进行更改,然后重新添加该类

e、 g.创建一个具有转换样式的新转换类:

.transitions{
     transition-duration: 0.2s;
}
确保所有文本元素都具有所需的类。然后您的代码变成:

$(".text").each(function(i) {
   // Remove the transitions styling class
   $(this).removeClass('transitions');

   // Change the layout without transitions
   this.style.left = Math.random() * 10 + 'px'; this.style.top = i*10 + 'px'; 

   // Restore the transitions styling class
   $(this).addClass('transitions');
});
这比分离和附加DOM元素快得多,并且不会移动空格

为什么这些空行

因为在移动节点之前,它们在初始DOM中。如果查看blah的html源代码,您会发现四个换行符,它们在DOM中表示为空白文本节点。由于您没有删除它们,它们仍然驻留在DOM中——只是它们之间没有更多的s,使行变为空

为什么这些空行


因为在移动节点之前,它们在初始DOM中。如果查看blah的html源代码,您会发现四个换行符,它们在DOM中表示为空白文本节点。由于您没有删除它们,它们仍然驻留在DOM中-只是它们之间没有更多的s,使行变为空。

由于标记中有空格,因此有空行。另外,正如其他人在评论中提到的,您不需要分离。如果不想更改标记,请执行.trim

示例代码段:

$blah.find.text.eachfunctioni{ this.style.left=Math.random*10+'px';this.style.top=i*10+'px'; $this.appendTo$blah; }; log$blah.html.trim; 测试1 测试2 测试3
由于标记中有空格,因此有空行。另外,正如其他人在评论中提到的,您不需要分离。如果不想更改标记,请执行.trim

示例代码段:

$blah.find.text.eachfunctioni{ this.style.left=Math.random*10+'px';this.style.top=i*10+'px'; $this.appendTo$blah; }; log$blah.html.trim; 测试1 测试2 测试3
可以如何使重新附加后的最终DOM在好的位置有特征线,这样我就看起来干净,而不是没有linebreak HTML代码的单行?DOM不需要看起来干净。空白节点对于在块元素中呈现没有任何意义。我希望DOM看起来干净,因为我的代码有时会序列化或导出为HTMLIn。在这种情况下,通过类似$blah.contents.filterfunctionel{return el.nodeType==3&&/^\s*$/.testel.value;}的方式删除空文本节点。removeOkay!如何使重新附加后的最终DOM在好的位置有特征线,这样我就看起来干净,而不是没有linebreak HTML代码的单行?DOM不需要看起来干净。空白节点对于在块元素中呈现没有任何意义。我希望DOM看起来干净,因为我的代码有时会序列化或导出为HTMLIn。在这种情况下,通过类似$blah.contents.filterfunctionel{return el.nodeType==3&&/^\s*$/.testel.value;}的方式删除空文本节点.removeThat trim是一个相对缓慢的解决方案,如果它应用于内容以删除前导空白。它必须重新分析明显非常大的HTML。@TrueBlueAussie:是的。同意。HTML字符串将非常大,我看到的项目可能有数千个文本元素,事实上,你甚至不需要附加。就地更改将起作用。而且,如果您的HTML字符串很大,则需要更改标记以删除空白。不可能进行就地更改,存在转换延迟。。。为了避免这种情况,我分离、修改、重新添加了一个选项,即如果将修剪应用于内容以删除l,则修剪是一个相对缓慢的解决方案
读取空白。它必须重新分析明显非常大的HTML。@TrueBlueAussie:是的。同意。HTML字符串将非常大,我看到的项目可能有数千个文本元素,事实上,你甚至不需要附加。就地更改将起作用。而且,如果您的HTML字符串很大,则需要更改标记以删除空白。不可能进行就地更改,存在转换延迟。。。为了避免这种情况,我分离、修改、重新EndFacePalm:/在所有这些过程中,我没有想到Op为什么要这么做的真正问题!我不应该在办公室呆到很晚:+1确实如此。FacePalm:/在这一切期间,我没有想到Op为什么要做这一切的真正问题!我不应该在办公室呆到很晚:+1。我一直在玩你相当酷的演示网站,除了性能之外,我印象非常深刻。你需要,至少,淡出相机后面非常大的元素,并可能删除它们。呈现大量放大字体会导致浏览器停止运行。也可以用一个元素(如淡灰色矩形或其他更好的元素)替换真正的小组项目?这将有助于导航,因为在大画面中很容易丢失小内容。做得好:谢谢这些好的评论@TrueBlueAussie。我将很快在GitHub上发布这个开源项目。。。你能帮我吗旁注:您使用哪种浏览器?铬?当我们放大很多的时候,Chrome上的项目看起来真的很慢。。。这很奇怪,因为在Firefox或IE上,如果我们放大很多,它会很快!是的,这是我考虑的第一个开源项目之一:我使用Chrome。我早期的背景是写电子游戏,所以这些类型的筛选技术将有助于提高性能。@TrueBlueAusie:就是这样!让我们在那里见面:一直在玩你相当酷的演示网站,我印象深刻,除了性能。你需要,至少,淡出相机后面非常大的元素,并可能删除它们。呈现大量放大字体会导致浏览器停止运行。也可以用一个元素(如淡灰色矩形或其他更好的元素)替换真正的小组项目?这将有助于导航,因为在大画面中很容易丢失小内容。做得好:谢谢这些好的评论@TrueBlueAussie。我将很快在GitHub上发布这个开源项目。。。你能帮我吗旁注:您使用哪种浏览器?铬?当我们放大很多的时候,Chrome上的项目看起来真的很慢。。。这很奇怪,因为在Firefox或IE上,如果我们放大很多,它会很快!是的,这是我考虑的第一个开源项目之一:我使用Chrome。我早期的背景是写电子游戏,所以这些类型的筛选技术将有助于提高性能。@TrueBlueAusie:就是这样!让我们在那里见面: