我为一个网络应用程序启动开发,我经常遇到以下代码。
<div class="items container">
<div class="item">
<div class="property propertyA">Some stuff</div>
</div>
</div>
我们的典型jQuery选择器看起来非常类似于:
$("div.items.container > div.item > div.property.propertyA").map(doStuff());
问题是我们经常调用类选择器,直到执行JS所花费的大部分时间用于运行jQuery的内部curCSS方法。
虽然我们可能只有一个物品容器,但它可能包含数百个物品,每个物品都有数十个物品。实际上,在任何给定的时间页面上总是存在大约5K + html标签。
我们在客户端捆绑越来越多的逻辑以容纳新功能。我觉得这种情况不会长久存在,因为有些浏览器在某些条件下已经显示出致命的“你的页面没有响应”的消息。我们正考虑很快重构整个客户端。
我正在考虑在新的xml命名空间中实现一些新的XHTML标记,因此它看起来像:
<items>
<item>
<propertyA>Some Stuff</div>
</item>
</items>
然后我可以选择以下方式:
$("items > item > propertyA")
或直接
$("propertyA")
纠正我,如果我错了,但摆脱我的慢速CSS选择器,支持一些“getElementsByTagName”可以节省我很多周期,同时使我的css cuter和我的整体代码更整洁。这样的解决方案会起作用吗?
BTW:在这里我们假设IE不存在并且firefox 3+ || Chrome 3+是我们的目标受众。答案 0 :(得分:1)
我不知道你提出的建议是否真的有必要,或者是否会提高速度。但是,如果您知道“property”或“propertyA”类将始终位于“item”类中,那么仅使用.property
或.propertyA
作为选择器会更有效。< / p>
如果您的.items.container
元素对于页面是唯一的,请考虑在其上使用ID。然后jQuery将首先选择ID,然后只查看项目内的ID。除非您要排除其他元素(例如<p class="propertyA">...</p>
),否则不要将标记名称添加到选择查询中。
如果你反复调用选择器,你应该缓存结果以防止重复搜索(尽管我相信jQuery 1.4会为你做这个)。类似的东西:
var $properties = $(".items.container > .item > .property.propertyA");
$properties.map(doStuff());
//later on...
$properties.map(doStuff());
答案 1 :(得分:0)
只要您制作自定义xlmns,这是一个好主意,任何缩短开发时间的东西都是个好主意。这是一个封闭的环境吗?或者你只是关闭IE支持?