2011-10-18 44 views
0

任何更好的方法來做到這一點(假設我有10 a元素,例如)?將相同的功能應用於很多元素(按順序)

$('#id > a:nth-child(1)').click(function() { changeP(1); return false; }); 
$('#id > a:nth-child(2)').click(function() { changeP(2); return false; }); 
$('#id > a:nth-child(3)').click(function() { changeP(3); return false; }); 

我知道2級的可能性,但我並不特別喜歡它們:使用.bind()與參數,而不是使用.map(return $(this)).click()

  • 然後迭代與索引變種
  • 陣列之上

    回答

    3

    你可以這樣做:

    $('#id > a').each(function(i) { 
        $(this).click(function() { changeP(i); return false; }); 
    }); 
    

    jQuery將傳遞作爲第一個參數「每個」功能所選擇的元素的索引。

    +0

    +1比'index()',它必須遍歷所有的兄弟元素,並計算它們的數量。 – bobince

    2

    您可以使用滿足index的元素獲得元素的索引(相對於它的父元素) HOD:

    $("#id > a").click(function() { 
        changeP($(this).index() + 1); 
        return false; 
    }); 
    

    您需要在1這樣做是因爲jQuery的方法往往適用於匹配的集合中的所有元素加1,因爲元素的索引從0開始,而nth-child開始,所以click事件處理程序綁定到與選擇器匹配的所有元素。

    +0

    如果還有其他元素(不是''')在兩者之間?這不會導致錯誤的索引? –

    +0

    嗯。是的,非常真實的... –

    +0

    你可以「竊取」我答案的一部分;)(緩存選定的元素並執行$ a.index(this)')。或者你可以'$(this).index(「#id> a」)'。 –

    0
    $('#id > a').click(function(){ 
        changeP($(this).index(' #id > a')+1); 
        return false; 
    }); 
    

    參見:index()

    這個工程即使其他元素插入到代碼:

    <div id="id"> 
        <a href="#">1</a> 
        <span>hello</span> 
        <a href="#">2</a> 
        <a href="#">3</a> 
        <a href="#">4</a> 
    </div> 
    
    +0

    這將得到相對於所有'a'元素的索引,而不僅僅是'#id> a'。 –

    +0

    已更新的答案。 – artlung

    0
    $.each($('#id > a'), function(index) { 
        $(this).click(function() { 
        changeP(index); return false; }); 
    }); 
    
    0

    你要找的。每():http://api.jquery.com/each/

    $('#id > a').each(function(index){ 
        $(this).click(function(){ 
         changeP(index+1); 
        }); 
    }); 
    
    相關問題