jQuery按名称获取元素



由于需要减少字符,我想将javascript转换为jQuery。这是我的HTML&Javascript

var shorty = document.getElementsByName("DPdays")[0].getElementsByTagName("td")[i].id;
<tr class="DPtag" name="DPdays">
	<td id="MO">&nbsp;</td>
    <td id="DI">&nbsp;</td>
    <td id="MI">&nbsp;</td>
    <td id="DO">&nbsp;</td>
    <td id="FR">&nbsp;</td>
    <td id="SA">&nbsp;</td>
    <td id="SO">&nbsp;</td>
</tr>

我试过了:

var shorty = $('.DPtag > td:eq('+i+')').attr('id');
var shorty = $('[name=DPdays] > td:eq('+i+')').attr('id');
var shorty = $('[name=DPdays] > td:eq('+i+')').id;

但都不起作用。我该怎么做?

请注意,至少在Chrome和Firefox中,如果<table>标记中未包含<td>元素,则无法选择它们。如果你不这样做,这无论如何都不是有效的HTML。我假设i是循环中的一个变量,用于获取所有id。在jQuery中,你可以这样做:

var $td = $('.DPtag td'); 
for (var i = 0; i < $td.length; i++) {
  var shorty = $td[i].id;
  console.log(shorty);
}

Fiddle:https://jsfiddle.net/q3q076tn/

编辑:当然,您可以在没有jQuery的情况下编写它,就像交换一样简单

var $td = $('.DPtag td');

带有:

var $td = document.querySelectorAll('.DPtag td');

重要节点:像在问题和公认答案中那样获取数据不是一个好主意。

  1. 您可以重新选择/搜索每个单个中的所有<td>元素循环的迭代。这让它变得不必要地慢
  2. 您将名称属性用于无效HTML的<tr>标记。如CBroe中所述。另请参阅:https://developer.mozilla.org/en-US/docs/Web/API/Element/name这就是为什么您应该通过类或ID来选择它

实际上,您不需要jQuery来更简洁地编写它:

document.querySelectorAll('[name=DPdays] td')[i].id

但是如果你更喜欢jQuery

$('[name=DPdays] td')[i].id

最新更新