我正在尝试使用 jQuery 更改 HTML 表每行中的第一个单元格,以便它不再是<td>
元素,而是<th scope="row">
。使用 d3 生成的完整表在此 Plunker 中可用。 以下为摘录:
<tbody>
<tr>
<td>Total</td>
<td>36,000</td>
<td>6,118</td>
<td>5,034</td>
<td>5,496</td>
</tr>
<tr>
<td>Percent_patients</td>
<td>100</td>
<td>16.8</td>
<td>13.8</td>
<td>15.1</td>
</tr>
</tbody>
我想做的是让它像这样:
<tbody>
<tr>
<th scope="row">Total</th>
<td>36,000</td>
<td>6,118</td>
<td>5,034</td>
<td>5,496</td>
</tr>
<tr>
<th scope="row">Percent_patients</th>
<td>100</td>
<td>16.8</td>
<td>13.8</td>
<td>15.1</td>
</tr>
</tbody>
我试图在SO上遵循类似的例子,但是即使是第一步我也遇到了麻烦,即选择每行的第一个单元格(并更改有关它的任何内容(。例如,我尝试添加$("#switchable-table tr td:first-child").addClass("black");
,但这似乎没有注册。
有人能够根据我的 Plunker 演示解决方案吗?
这是d3
方法。你不需要使用jQuery。
- 从您附加的
td
中取下d.index
。 - 使用其他选择追加
d.index
。
相关代码:
trs.selectAll('th')
.data(function (d) { return [d.index]; })
.enter()
.append('th')
.attr('scope', 'row')
.text(function (d) { return d; });
这是更新的Plunkr:
http://plnkr.co/edit/JKaSXMiegsPdmv3fBVOK?p=preview
此外,在将data
绑定到td
的步骤中,您可以将其替换为已经具有所有必要标头headers
数组。这里:
trs.selectAll('td')
.data(function(d){ return headers.map(function(key) { return d[key];}); })
希望这有帮助。
"我正在尝试使用 jQuery 更改 HTML 表每行中的第一个单元格,以便它不再是<td> element
而是<th scope="row">
" - 虽然你可以在事后更改它,但你为什么要这样做?与其在事后更改元素,不如先附加第 th 个元素。
在这里,您可以为每一行附加 td 元素:
trs.selectAll('td')
.data(function(d){ return [d.index, d['Total'], d['PRIMARY Alcohol only'], d['Alcohol with secondary drug'], d['Heroin'], d['Other opiates'], d['Cocaine (smoked)'], d['Cocaine (other route)'], d['Marijuana'], d['Amphetamines'], d['Other stimulants'], d['Tranquilizers'], d['Sedatives'], d['Hallucinogens'], d['PCP'], d['Inhalants'], d['Other/Unknown']]; })
.enter()
.append('td')
.text(function(d){
return d;
});
而是附加 th,然后通过输入周期进入其余的 tds:
trs.append("th")
.text(function(d) { return d.index; })
.attr("scope","row")
trs.selectAll('td')
.data(function(d){ return [d['Total'], d['PRIMARY Alcohol only'], d['Alcohol with secondary drug'], d['Heroin'], d['Other opiates'], d['Cocaine (smoked)'], d['Cocaine (other route)'], d['Marijuana'], d['Amphetamines'], d['Other stimulants'], d['Tranquilizers'], d['Sedatives'], d['Hallucinogens'], d['PCP'], d['Inhalants'], d['Other/Unknown']]; })
.enter()
.append('td')
.text(function(d){
return d;
});
更新的普伦克
若要选择每行中的第一个单元格,请使用:first-child
选择器,因为您知道第一个子单元格将是单元格。你说这行不通,但它确实行得通(如果我假设你id="switchable-table"
在桌面上(。:-)也许您过早地运行了$(...)
函数:将script
标签放在文档的最后,就在结束</body>
标签之前。
要将一个元素替换为另一个元素,请使用replaceWith
.
所以:
$("#switchable-table tr td:first-child").replaceWith('<th scope="row"></th>');
它足够聪明,可以单独替换每个元素。
$("#switchable-table tr td:first-child").replaceWith('<th scope="row"></th>');
<table id="switchable-table">
<tbody>
<tr>
<td>Total</td>
<td>36,000</td>
<td>6,118</td>
<td>5,034</td>
<td>5,496</td>
</tr>
<tr>
<td>Percent_patients</td>
<td>100</td>
<td>16.8</td>
<td>13.8</td>
<td>15.1</td>
</tr>
</tbody>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
例如,我尝试添加 $("#switchable-table tr td:first-child"(.addClass("black"(;
可切换表不是一个 ID,它是一个类,所以...
$(".switchable-table tr td:first-child").addClass("black");