jquery重复元素创建

标签 jquery

以下哪个更好?
1)在每个循环上创建元素

$(obj).children('option').each(function(){
  var item = $('<div />')
    .html($(this).text())
    .append(plus)
    .addClass('ui-widget-content ui-state-default')
    .hover(
      function(){$(this).addClass('ui-state-hover')}, 
      function(){$(this).removeClass('ui-state-hover');}
    );
    $(list).append(item);
});

<小时/> 2)创建元素,仅在每次循环时更改其html
注意:这不起作用,它需要 .clone() 如下。

var item = $('<div />')
  .addClass('ui-widget-content ui-state-default')
  .hover(
    function(){$(this).addClass('ui-state-hover')}, 
    function(){$(this).removeClass('ui-state-hover');});

$(obj).children('option').each(function(){
  $(item).html($(this).text()).append(plus);  
  $(list).append(item);
});


更新:
因此,在审查了所有答案/评论之后,这是最终的功能。 还有更多改进吗?

function create_list(obj) {
  var list = $('<div />')
    .attr('id','keyword_unselect').addClass('ui-widget')
    .delegate("div", "mouseenter mouseleave", function() {
      $(this).toggleClass('ui-state-hover');
    });

  var plus = $('<div />').addClass('ui-icon-plus');

  var item = $('<div />')
    .append(plus)
    .addClass('ui-widget-content ui-state-default');

  $(obj).children('option').each(function(){    
    item.clone(true)
      .prepend(this.text)
      .appendTo(list);
  });
  return list;
};

最佳答案

在本例中,第一个更好,但它目前具有不同的效果(元素每次都会移动)。

创建一次即可 .clone() 用于附加,如下所示:

 var item = $('<div />', { 'class': 'ui-widget-content ui-state-default' })
                  .hover(function(){$(this).addClass('ui-state-hover')}, 
                         function(){$(this).removeClass('ui-state-hover');});

$(obj).children('option').each(function(){
  $(list).append(item.clone(true).html(this.text).append(plus));
});

You can give it a try here .

我正在使用.text <option>的属性(property)直接也可以节省一些 CPU 周期,如果您出于某种原因需要对内容进行编码,只需相反即可。

<小时/>

或者使用 .delegate() 的更高效版本仅绑定(bind)那些 mousenetermouseleave事件一次:

$(list).delegate("div", "mouseenter mouseleave", function() {
    $(this).toggleClass('ui-state-hover');
});

var item = $('<div />', { 'class': 'ui-widget-content ui-state-default' });    
$(obj).children('option').each(function(){
  $(list).append(item.clone().html(this.text).append(plus));
});

You can give it a try here .

关于jquery重复元素创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3708638/

相关文章:

javascript - jQuery - 通过单击链接问题触发事件

javascript - 如何解决 JavaScript 中 updateServing 函数不工作的问题?

jquery - 日期选择器不工作。我找不到我在代码中遗漏了什么

jquery - 如果 li 在 ajax 加载的内容中有 ul

jquery - CSS Keyframes - 内联样式的延迟动画

Jquery 效果在固定菜单上延迟

jquery - 使用 jQuery 限制特殊字符

javascript - jQuery 绑定(bind)对象上的所有事件

jquery - Highchart - 线条或区域不从左侧点开始

javascript - 工具提示不起作用( Bootstrap )