2016-03-04 53 views
0

我想將每個複選框的.parent("span").prop("title")設置爲它們的.parent("span").parent("td").parent("tr")的標題。由於jQuery在存在多個元素時會迭代執行,所以我不能在沒有循環的情況下做這樣的事情嗎?當多個選擇器在jQuery中執行時調用每個項目

$(":checkbox").parent("span").parent("td").parent("tr").prop("title", $(this).parent("span").prop("title")); 

在瀏覽器中呈現這樣的東西。

<tr class="GridRow_Default" id="ctl00_body_grdTime_ctl00__2"> 
    <td align="center"> 
     <span title="Regularizable"> 
      <input id="ctl00_body_grdTime_ctl00_ctl07_chkSub" type="checkbox" name="ctl00$body$grdTime$ctl00$ctl07$chkSub"> 
     </span> 
    </td>  
</tr> 

回答

1

我不能做這樣的事情沒有一個循環?

NO。要獲取當前元素引用,您必須迭代元素。您可以使用each()迭代所有複選框。

$(':checkbox').each(function() { 
    // `$(this)` here is the current checkbox 

    $(this) 
     .closest('tr') // Get closest ancestor `<tr>` 
     .attr('title', $(this).parent().attr('title')); // Set attribute value of `title` to that of the `parent` 
}); 
+2

我覺得OP要做到這一點,而不使用循環。 「我不能像沒有循環一樣做這樣的事情嗎?」 –

+1

@RinoRaj是的,但這是不可能的。我已添加說明。 – Tushar

+1

@RayonDabre從jQuery源代碼,'prop'和'attr' setters使用'access()'。下面是'1.3中({ \t道具:函數(名稱,值){ \t \t回訪問(這一點,jQuery.prop,名稱,值的arguments.length> 1); \t}'和'access'迭代元素,'var access = function(elems,fn,key,value,chainable,emptyGet,raw){...... if(fn){;我++){ \t \t \t \t FN( \t \t \t \t \t elems的[I], \t \t \t \t \t鍵, \t \t \t \t \t生吃?值:value.call(elems [i],i,fn(elems [i],key)) \t \t \t \t); \t \t \t} \t \t}' – Tushar

1

使用過濾器()得到的只是與SPAN其中包含輸入的TR:checkbox元素,並設置SPAN到TR的標題屬性的值。

$('tr').filter(function() { 
    return $(this).find('span > :checkbox').length; 
}).prop('title', function() { return $(this).find('span').eq(0).prop('title'); });