我已经用div构建了一个自定义选择框,我在功能中接线。最初我使用类和jquery dom遍历来连接所有内容。但后来我开始考虑这是否是最好的方法,因为我混合功能和样式。
接下来我查看了HTML 5的数据[[something]属性,但它对我来说并不合适,因为我的代码最终混乱了许多没有数据但只是标记的数据属性用于dom遍历。我也担心JQuery性能,因为堆栈上的多篇文章说属性查询速度较慢,但文章已经过时了。
所以最后我在考虑自定义属性,他们感觉比数据更清晰 - 因为他们并不意味着他们应该持有数据。但是他们遇到了相同的性能问题(可能是最糟糕的,因为他们不支持兼容/ JQuery)。它们也符合非标准。
另一方面,我知道angular使用了自定义属性,但它们没有参与dom遍历(我知道)所以没有性能损失,我觉得他们有一个更好的论据需要它们然后一个简单的小部件做
我的问题是:
包含类和数据属性的代码,它们在类的情况下执行相同的功能和样式。
<div class="ns-dropdown-zoom ns-toolbar-item " data-cns-type="cns-dropdown">
<div class="cns-dropdown-top">
<input type="text" class="cns-dropdown-selection-visible" value="75%" data-cns-dropdown-sel-visible />
<div class="cns-dropdown-arrow">
</div>
<!-- once we wire up the javascript the true selected value goes here -->
<input class="cns-dropdown-selection-hidden" type="hidden" data-cns-dropdown-sel-hidden/>
</div>
<div class="cns-dropdown-option-list" data-cns-dropdown-opt-list>
<div class="cns-dropdown-option" data-cns-dropdown-opt>
<span class="cns-dropdown-option-value" data-cns-dropdown-opt-value>10%</span>
<div class="cns-dropdown-option-display" data-cns-dropdown-opt-display>10%</div>
</div>
</div>
</div>
启动javascript,让您了解我如何遍历dom
var initDropDowns = function () {
// Init function for dropdowns
var dropDowns = $(".cns-drop");
var html = $("html");
html.click(function (event) {
dropDowns.each(function (index, el) {
var optionList = $(el).find(".cns-drop-option-list").get(0);
var selVisible = $(el).find(".cns-drop-selection-visible");
var selHidden = $(el).find(".cns-drop-selection-hidden");
var target = event.target;
var options;
var opt;
var i, iMax;
// Clicking outside the element
if (!$.contains(el, target)) {
$(el).removeClass("cns-drop-expand");
// Clicking inside the element, inclusive
} else {
答案 0 :(得分:8)
使用属性而不是类的性能仍然是个问题吗?
使用完全自定义的属性只是不好的做法吗?
最佳实践:首选使用划线分隔格式(例如ng-bind 对于ngBind)。如果您想使用HTML验证工具,则可以 而是使用数据前缀版本(例如ngBind的data-ng-bind)。
当你没有真正持有数据时使用数据 - [某事]是不好的做法?
data-is-whatever='true'
您会推荐哪种方法?为什么?