将文本从几个元素克隆为一个href作为mailto主题

时间:2017-08-31 11:52:58

标签: javascript jquery

我正在尝试将td元素中的所有文字附加到a元素作为mailto链接的主题,但我只能获得第一个最接近的元素文本。如何制作它以便从所有元素中检索文本?如果可能,我宁愿在a元素中使用tbody链接而不是tr包装。

HTML:

<tbody>
<tr class="row-2" role="row">
    <td class="column-1" tabindex="0" style="">2238221D2</td>
    <td class="column-2">HPINC</td>
    <td class="column-3">N7P47AA</td>
    <td class="column-4">HP USB 3.0 to Gigabit LAN Adapter</td>
    <td class="column-5" style="display: none;">#4.2</td>
    <td class="column-6" style="display: none;">16</td>
    <td class="column-7" style="display: none;">30</td>
    <td class="column-8" style="display: none;">52</td>
    <a class="mailme" href="mailto:test@test.com?subject=Product request&body=">mailtolink</a>
</tr>
</tbody>

脚本:

$('a.mailme').each(function() {
    $(this).attr('href', $(this).attr('href') + 
    $(this).closest('a.mailme').prev('td').text());
});

2 个答案:

答案 0 :(得分:3)

您的代码几乎是正确的,只需选择所有td-tag,获取文本并加入生成的数组:

$('a.mailme').each(function() {
    $(this).attr('href', $(this).attr('href') + 
    $(this).closest('.row-2').children('td').slice(0,-1).map(function() {return $(this).html()}).get().join(','));
});

工作小提琴:https://jsfiddle.net/21873jcz/

编辑如果您修复了html代码,我的解决方案将会正常运行。 tr标签中不允许使用标签。只允许使用td或th元素。所以请修复你的HTML,它会工作

答案 1 :(得分:1)

我发现了一些问题,但这就是你想要的:

https://jsfiddle.net/uqswr2k3/

var subject = "";
$(".row-2 td").each (function() {
  subject = subject + '-' + $(this).html();
}); 

$(".mailme").attr('href', 'mailto:test@test.com?subject=' + subject + '&body=');
<table>
<tbody>
<tr class="row-2" role="row">
    <td class="column-1" tabindex="0" style="">2238221D2</td>
    <td class="column-2">HPINC</td>
    <td class="column-3">N7P47AA</td>
    <td class="column-4">HP USB 3.0 to Gigabit LAN Adapter</td>
    <td class="column-5" style="display: none;">#4.2</td>
    <td class="column-6" style="display: none;">16</td>
    <td class="column-7" style="display: none;">30</td>
    <td class="column-8" style="display: none;">52</td>
    <a class="mailme" href="">mailtolink</a>
</tr>
</tbody>
</table>

确保tbody有一个外部表,否则会导致jQuery出现问题。您正在将主题的值设置为当前迭代,而不是全部收集它们。我放了一个名为subject的变量来添加每个td单元格的HTML内容。我用短划线-将主题中的每个值分开,以使其更清晰。