我目前有将HTML表格导出为CSV文件的脚本。
它按预期工作并导出表格,但它会导出所有内容。
我想要排除其中包含.hidden
类的行。
我尝试在:not()
部分使用.not()
选择器和.find("tr")
方法,但这两种方法似乎都没有效果。
以下是遍历<tr>
的代码部分:(整个脚本来自此js插件,名为Table2Download)
$(this).find("tr:not(.hidden)").each(function () {
if ($(this).find("td").length > 0) {
var sep = "";
$(this).find("td").each(function () {
csv += sep + settings.quotes + $(this).text() + settings.quotes;
sep = settings.separator;
});
csv += settings.newline;
} else if ($(this).find("th").length > 0) {
var sep = "";
$(this).find("th").each(function () {
csv += sep + settings.quotes + $(this).text() + settings.quotes;
sep = settings.separator;
});
csv += settings.newline;
}
}
以下是HTML表格示例:
<table class="test-table">
<thead>
<tr role="row">
<th> Name </th>
<th> Test </th>
<th> Date </th>
<th> Score </th>
<th> something else </th>
</tr></thead>
<tbody>
<tr class="hidden">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">4</td>
</tr>
<tr class="even">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">5</td>
</tr>
<tr class="odd">
<td title="Name">John Doe</td>
<td title="Test">exam 2</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="even">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">4</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">3</td>
</tr>
</tbody>
</table>
任何帮助将不胜感激!
答案 0 :(得分:1)
$("tr:not(.hidden)").each(function() {
$(this).find("td").css("color", "red")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="test-table">
<thead>
<tr role="row">
<th> Name </th>
<th> Test </th>
<th> Date </th>
<th> Score </th>
<th> something else </th>
</tr>
</thead>
<tbody>
<tr class="hidden">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">4</td>
</tr>
<tr class="even">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">5</td>
</tr>
<tr class="odd">
<td title="Name">John Doe</td>
<td title="Test">exam 2</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="even">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">4</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">3</td>
</tr>
</tbody>
</table>
仅使用$("tr:not(.hidden)")
答案 1 :(得分:1)
似乎对我来说工作正常。我将.test-table
代替this
。但完全删除.find()
并仅仅针对tr也可以像guradio的回答一样。
var csv = '';
var settings = {quotes:'"',separator:',',newline:"\n"}
$(".test-table").find("tr:not(.hidden)").each(function () {
if ($(this).find("td").length > 0) {
var sep = "";
$(this).find("td").each(function () {
csv += sep + settings.quotes + $(this).text() + settings.quotes;
sep = settings.separator;
});
csv += settings.newline;
} else if ($(this).find("th").length > 0) {
var sep = "";
$(this).find("th").each(function () {
csv += sep + settings.quotes + $(this).text() + settings.quotes;
sep = settings.separator;
});
csv += settings.newline;
}
});
console.log(csv);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table class="test-table">
<thead>
<tr role="row">
<th> Name </th>
<th> Test </th>
<th> Date </th>
<th> Score </th>
<th> something else </th>
</tr></thead>
<tbody>
<tr class="hidden">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">4</td>
</tr>
<tr class="even">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">5</td>
</tr>
<tr class="odd">
<td title="Name">John Doe</td>
<td title="Test">exam 2</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="even">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">4</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">3</td>
</tr>
</tbody>
</table>
&#13;
答案 2 :(得分:0)
WordPress预先打包了一份jQuery。
当加载WordPress的jQuery时,它使用compatibility mode,这是一种避免与其他语言库冲突的机制。
因此,您无法像在其他项目中那样直接使用美元符号 $
。在为WordPress编写jQuery时,您需要使用 jQuery
。查看以下示例:
var $hiddenTr = jQuery("tr").not(".hidden");
$hiddenTr.each(function() {
jQuery(this).find("td").hide();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<table class="test-table">
<thead>
<tr role="row">
<th> Name </th>
<th> Test </th>
<th> Date </th>
<th> Score </th>
<th> something else </th>
</tr></thead>
<tbody>
<tr class="hidden">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">4</td>
</tr>
<tr class="even">
<td title="Name">John Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">5</td>
</tr>
<tr class="odd">
<td title="Name">John Doe</td>
<td title="Test">exam 2</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="even">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">03/08/2017</td>
<td title="Score">7</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">4</td>
</tr>
<tr class="hidden">
<td title="Name">Wendy Doe</td>
<td title="Test">exam 1</td>
<td title="Date">02/11/2017</td>
<td title="Score">3</td>
</tr>
</tbody>
</table>
&#13;
答案 3 :(得分:0)
感谢所有发帖!! 我通过使用另一个脚本为这个做了一个工作!
我认为以前代码的问题是导出链接运行并在我的其他javascript代码之前创建文件,因此它不会读取仅通过javascript添加的.hidden
类(带复选框{ {1}}事件)。
无论如何,使用这个新代码我会稍微更改一下,用此行排除onchange
类。
.hidden