jQuery 按名称获取元素

jQuery get element by name

由于需要减少字符,我想将我们的 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;

但是 none 有效。我该怎么做?

请注意,至少在 Chrome 和 Firefox 中,如果 <td> 元素未包含在 <table> 标记中,则无法 select 元素。如果您不这样做,那是无效的 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. 你会 reselect/search 每个 <td> 元素 循环的迭代。这使得它变得不必要地慢。
  2. 您对 <tr> 标签使用的名称 属性 无效 HTML。正如 CBroe 中提到的那样。另请参阅:https://developer.mozilla.org/en-US/docs/Web/API/Element/name 这就是为什么您应该通过 class 或 ID select 它的原因。

其实不需要jQuery写得更简洁:

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

但如果你更喜欢 jQuery

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