我对JS的性能有疑问.
说,我有下一个代码:
var divContainer = document.createElement("div"); divContainer.id="container";
var divHeader = document.createElement("div"); divHeader.id="header";
var divData = document.createElement("div"); divData.id="data";
var divFooter = document.createElement("div"); divFooter.id="footer";
divContainer.appendChild( divHeader );
divContainer.appendChild( divData );
divContainer.appendChild( divFooter );
document.getElementById("someElement").appendChild( divContainer );
Run Code Online (Sandbox Code Playgroud)
这段代码只为其他一些函数创建了一个shell来创建一个网格,创建网格的过程非常复杂,并且有很多验证,目前我用2种方法填充网格,一个在数组变量中创建整个html另一个创建元素并将它们附加到一个元素documentFragment.
我的问题是,当我使用片段时,如果在使用片段时性能确实有所改善 - 他们管理内存中的元素,因此它们不会附加到文档中,因此不会触发DOM重新计算和其他令人讨厌的东西.但是我创建变量的方式是,在将容器附加到实际页面之前,它们不会附加到任何DOM元素.
所以我想知道以前的代码是否比使用包装它的文档片段具有更好的性能:
var fragment = document.createDocumentFragment();
var divContainer = document.createElement("div"); divContainer.id="container";
var divHeader = document.createElement("div"); divHeader.id="header";
var divData = document.createElement("div"); divData.id="data";
var divFooter = document.createElement("div"); divFooter.id="footer";
divContainer.appendChild( divHeader );
divContainer.appendChild( divData );
divContainer.appendChild( divFooter );
fragment.appendChild( divContainer )
document.getElementById("someElement").appendChild( fragment.cloneNode(true) ); …Run Code Online (Sandbox Code Playgroud) 我有这个让我头疼的问题......
说,我有一个包含数千行的表,表的结构包含父 - >子关系.
这种关系可以达到6个级别.这是表结构的示例:
ProductId | ParentId | Levels
1174 0 1174
311 1174 311, 1174
1186 311 1186, 311, 1174
448 1186 448, 1186, 311, 1174
3365 448 3365, 448, 1186, 311, 1174
Run Code Online (Sandbox Code Playgroud)
我们有一个循环遍历整个表以获取关系并保存"级别"列的进程,这个过程非常慢(因为循环)并且我尝试了一些cte来获得关系,但是很难实现.
到目前为止,我已经尝试过这个cte,但它没有做我希望的事情,而且,它似乎在复制行...
;With Parents(ProductId, ParentId, Levels)
As(
Select ProductId, ParentId, Levels
From Products
Where ParentId = 0
Union All
Select p.ProductId, p.ParentId, p.Levels
From Products p
Join Parents cte On cte.ProductId = p.ParentId
)
Select *
From Parents
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的,我们有一个循环表的过程,它完成它的工作,但它可能需要长达30分钟,我的问题是有更好的方法来做到这一点?我知道CTE允许我这样做,但我很糟糕,同样,应该在桌面上计算和更新关卡列,是否可能?
这是一个Sqlfiddle以防有人可以提供帮助,谢谢!
说,我有以下CSS类:
.upComing{ background:#ccc; font-weight:bold; }
Run Code Online (Sandbox Code Playgroud)
在我的HTML中,我有一个表,其中某些行应用了该类,如下所示:
<table>
<tr> <td></td> <td></td> </tr>
<tr> <td></td> <td></td> </tr>
<tr class='upComing'> <td></td> <td></td> </tr>
<tr> <td></td> <td></td> </tr>
<tr class='upComing'> <td></td> <td></td> </tr>
</table>
Run Code Online (Sandbox Code Playgroud)
到目前为止,这么好,但是通过JavaScript我有事件听td点击,我想得到行的颜色(我知道我可以得到行的类,但在这种情况下,我需要能够得到来自班级的颜色).
我需要这样做,因为表可以导出到excel文件,如果它们在CSS类上,行颜色不会应用于excel文件,我想在发送html之前将这种颜色应用于每个td到excel发电机.
PS:这个表是从我们创建的jQuery插件动态生成的,它仍然是一个正在进行中的工作,但是当我们对它充满信心时,我们将为公众发布它.
- 更新 - 这是关于这个主题的更新,确实有一个纯粹的javascript解决方案,我不得不深入研究jQuery的源代码来检查这一点.这是解决方案:
1)指向所需的元素
var tr = $("tr.upComing").first()[0];
Run Code Online (Sandbox Code Playgroud)
2)获得元素的COMPUTED STYLE
var css = window.getComputedStyle( tr );
Run Code Online (Sandbox Code Playgroud)
3)获得COMPUTED STYLE的属性值
var color = css.getPropertyValue( "background-color" );
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只在Mac上测试了FF,Safari,Chromium和Opera,如果有人可以在IE上尝试这个并给我们反馈意见,那将是非常棒的.