jquery结合了类似的代码

jquery结合了类似的代码

问题描述:

我有很多jquery点击函数,它们非常相似,如何将它们合并为较短的代码。 (使用regex或使用array foreach?)jquery结合了类似的代码

$(".menu").live('click', function() { 
    var value = $(this).html(); 
    $('#menu').html(value); 
}); 

$(".nav").live('click', function() { 
    var value = $(this).html(); 
    $('#nav').html(value); 
}); 

$(".list").live('click', function() { 
    var value = $(this).html(); 
    $('#list').html(value); 
}); 
+0

问题! ''.menu','.nav'和'.list'除了'document'之外,树中某个节点的所有子节点? –

+0

全部在第一个孩子点头'

' –

这应该这样做:

var elems = ["menu", "nav", "list"]; 
$.each(elems, function(i, elem){ 
    $("."+elem).live('click',function(){ 
     var value = $(this).html(); 
     $('#'+elem).html(value); 
    }); 
}); 
  1. 创建元素的列表。
  2. 遍历它使用$.each
  3. 函数的第二个参数等于元素列表(menunav,..)
+0

谢谢,这比我形象更容易。 –

Rob的答案肯定是投票机,值得,但我只是想说有时你想限制两个元素之间的任意连接。为什么元素X有一个类必须与元素Y的ID相同?这是非常随意的,并且可能会让人稍后想出来。

可以代替接近它像这使其更加坚固:

<a href="#" class="foo" data-your-data-attr="alice">alice</a> 
<a href="#" class="foo" data-your-data-attr="bob">bob</a> 
<a href="#" class="foo" data-your-data-attr="sue">sue</a> 

现在你的JS超成为直接的和简单:

$(".foo").live('click',function(){ 
    var value = $(this).html(); 
    var yourDataAttr= $(this).data('yourDataAttr'); 
    $('#' + yourDataAttr).html(value); 
}); 
+1

请注意,数据属性应该是“连字符分隔”,而不是“camelCase”。 jQuery为你处理转换 - '.data('yourDataAttr')'将引用'data-your-data-attr'。 – Eric

+0

@Eric最准确的,我的错误之一。 –