2009-12-11 118 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>