jQuery获取可见的表单元格';价值观

jQuery获取可见的表单元格';价值观,jquery,asp.net-mvc,csv,Jquery,Asp.net Mvc,Csv,我有一个类似这样的表,其中大多数行不显示: <table id="myTable" class="tablesorter"> <thead> <tr> <th>header1</th> <th>header2</th> ... </tr> </thead> <

我有一个类似这样的表,其中大多数行不显示:

<table id="myTable" class="tablesorter">
    <thead>
        <tr>
            <th>header1</th>
            <th>header2</th>
            ...
        </tr>
    </thead>
    <tbody>
        <tr style="display:none;">
            <td>content1</td>
            <td>content2</td>
            ...
        </tr>
        <tr style="display:none;">
            <td>content1</td>
            <td>content2</td>
            ...
        </tr>
        <tr>
            <td>content1</td>
            <td>content2</td>
            ...
        </tr>
        ...
    </tbody>
</table>

校长1
校长2
...
内容1
内容2
...
内容1
内容2
...
内容1
内容2
...
...
我试图访问表中所有可见的行,并将每个单元格的值连接到一个字符串,该字符串将输出到CSV中。我有一些jQuery代码,但目前还不太成熟:

<input type="button" value="Export" id="csv-export" />

<script type="text/javascript">
    $(function () {
        $("#csv-export").click(function () {
            var csvStr = "";
            $("#myTable tr:visible td").each(function () {   //for each td in each visible row
                if ($(this).has("a") == false) {   //if the td does not contain a link
                    csvStr += $(this).html();   //Append the td's html
                }
            });
            $.get('@Url.Action("CSVExport")', { csv: csvStr });
        });
    });
</script>

$(函数(){
$(“#csv导出”)。单击(函数(){
var csvStr=“”;
$(“#myTable tr:visible td”)。每个(函数(){//用于每个可见行中的每个td
if($(this).has(“a”)==false){//如果td不包含链接
csvStr+=$(this.html();//附加td的html
}
});
$.get('@Url.Action(“CSVExport”),{csv:csvStr});
});
});
$(“#myTable tr:visible td”)。每个(函数(){
都失败了。这里有什么帮助吗?我在编写这种类型的代码方面有点业余。我希望此代码选择所有未设置为
显示:无的
元素,然后针对每个元素,选择并访问所有
td
元素。

()
方法返回jQuery对象,对象在JavaScript中是真实值,
has
不同于
hasClass
方法不返回布尔值,它是一种过滤方法,您应该使用
length
属性:

if (!$(this).find("a").length) { 
如果要排除具有子体的
td
元素,可以使用
.not()
方法:

$("#myTable tr:visible td").not(":has(a)").each(function () {
var csvString = $("#myTable tr:visible td").not(":has(a)").map(function() {
     return $.trim( $(this).text() );
}).get().join();
如果要创建逗号分隔值字符串,可以使用
.map()
方法:

$("#myTable tr:visible td").not(":has(a)").each(function () {
var csvString = $("#myTable tr:visible td").not(":has(a)").map(function() {
     return $.trim( $(this).text() );
}).get().join();

您遇到的问题是has将返回一个集合。为了从中获取真实值,您应该检查length属性

if (!$(this).has("a").length) {  
 csvStr += $(this).html();
}

否则,其他一切都可以正常工作。

当你说该行失败时,你是什么意思?你是得到了JS错误?还是根本没有运行任何东西?@Jacob当我进入该行时,它跳到
$。get
结尾,甚至没有进入if语句。