2009-12-11 122 views
0

我必須在TD以內的所有圖像的onClick事件上附加方法copyToLeft。 TD是在名爲mismatchList的表裏面,所以結構變成這樣mismatchList > tbody > tr > td > img如何在jQuery中做到這一點?

雖然我已經這樣做了,但那是使用普通的javascript。我所做的是,我手動添加copyToLeft(this);方法在onClick事件的所有指定的元素在創建時。 [這是我想省略和使用jQuery以某種方式執行此操作的步驟]。

同樣的copyToLeft定義是這樣的: -

function copyToLeft(obj){ 
    leftObj = getLeftTD (obj); // my method which returns the adjacent Left TD 
    rightObj = getRightTD (obj); 

    if (leftObj.innerHTML != rightObj.innerHTML) {    
     leftObj.innerHTML = rightObj.innerHTML; 
     leftObj.bgColor = '#1DD50F'; 
    }else{ 
     alert ('Both values are same'); 
    } 
} 

如果需要copyToLeft方法的定義也可以改變。 [萬一你想,jQuery的可以用來使這個方法更好:)]


編輯

不要問另外一個問題我只是添加了新的要求的:) [讓我知道如果我應該創建新的]
我必須將copyToLeft方法添加到我指定的所有圖像中,但是與圖像src一起應爲left_arrow.gif,並且如果src爲right_arrow.gif,則添加copyToRight方法。另外,我們如何才能在jQuery中獲得相鄰的左/右TD,因爲我想重新使用我的getLeftTDgetRightTD方法?

回答

1

你可以做這樣的事情相匹配的圖片src。

$('#mismatchList > tbody > tr > td > img[src='left_arrow.gif']').click(copyToLeft); 
$('#mismatchList > tbody > tr > td > img[src='right_arrow.gif']').click(copyToRight); 

值得注意的是,部分匹配的圖片src不使用SRC的全部內容,因此,如果您移動圖像到不同的目錄時,它就會停止工作。如果你只是想匹配源代碼的末尾,你可以使用$ =而不是= =。

下面是TheVillageIdiots重寫您的副本左功能的變體。我的

function copyToLeft() { 
    var cell = $(this).closest('td'); 
    var leftObj = cell.prev(); 
    var rightObj = cell.next(); 

    if (leftObj.html() != rightObj.html()) {       
     leftObj.html(rightObj.html()); 
     leftObj.css('background-color','#1DD50F'); 
    } else { 
     alert ('Both values are same'); 
    } 
} 

部分也認爲這將是有意義的只是在那裏你是否是left_arrow.gif或right_arrow.gif檢查$(本).attr(「SRC」),並採取相應的行動一個copyToSibling功能,而不是我之前發佈的兩個選擇器。

4

,如果我理解正確你的問題,在jQuery中,你會綁定事件本身:

$(document).ready(function() { 
    $('mismatchList > tbody > tr > td > img').click(copyToLeft); 
}); 

在你copyToLeft功能,你不接受obj作爲輸入參數,而不是this將是形象。 $(this)將是一個jQuery對象,包含圖像,如果您需要它...

+0

+1正是我剛剛寫的:) – Mickel 2009-12-11 10:33:35

+0

非常次要的事情,但是您的選擇器將匹配稱爲mismatchList的元素。問題並不清楚,但我猜它是一個id,在這種情況下它應該是#mismatchList或類(.mismatchList)。 – 2009-12-11 11:24:14

+0

好吧,是的,我只是直接複製選擇器,因爲我不認爲這是問題的關鍵部分。如果我想優化它,我會說'#mismatchList img',因爲不應該有任何圖表中沒有包含在'td'中的任何圖像。 – 2009-12-11 12:05:27

1

試試這個代碼:

<table id="tbl"> 
    <tbody> 
    <tr> 
     <td></td><td><img src="file:///...\delete.png" /></td> 
    </tr> 
    <tr> 
     <td></td><td><img src="file:///...\ok.png" /></td> 
    </tr> 
</tbody> 
</table> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("table#tbl img").click(function(){ 
      var td=$(this).parents("td"); 
      var tr=$(td).parents("tr"); 
      var left=$(td).prev("td"); 

      $(left).html($(td).html()); 
     }); 
    }); 
</script>