选择除HTML列表之外的所有列

时间:2013-07-02 19:44:59

标签: html html-table append export-to-excel getselection

我正在使用以下内容在我的应用程序中选择一个表元素,供用户将表拖放到Excel中:

$('#footer').on("click", "#exportSel", function () {
    var el = document.getElementById(curTable);
    var body = document.body, range, sel;
    if (document.createRange && window.getSelection) {
        range = document.createRange();
        var sel = window.getSelection ? window.getSelection() : document.selection;
        if (sel) {
            if (sel.removeAllRanges) {
                sel.removeAllRanges();
            } else if (sel.empty) {
                sel.empty();
            }
        }
        try {
            range.selectNodeContents(el);
            sel.addRange(range);
        } catch (e) {
            range.selectNode(el);
            sel.addRange(range);
        }
    } else if (body.createTextRange) {
        range = body.createTextRange();
        range.moveToElementText(el);
        range.select();
    }
});

......一切都很好。除了我的一个表在列中有图像,我想从选择中删除该列(或该列中的td)。

我将“Picture”td添加到“nosel”类中,并且能够将不在该类中的表中的所有td放入变量中:

cells = $("#" + curTable + " tr td:not(.nosel)");

然后我省略了删除或清空当前选择的代码,并尝试将每个单元格添加到选择中:

range.selectNode(cells[i]);
sel.addRange(range);

...但只选择了第一个td。

所以有两个问题:

  1. 这是否可能?

  2. 有没有比addRange更好的方法?我试过延伸但是没有用。

  3. 根据要求,这是我的表格的一个例子:

    <table class="sortable" id="resultsTable" border="1">
        <thead id="resultsHeader">
            <th>OID</th>
            <th>Image</th>
            <th>Address</th>
            <th>Parcel ID</th>
        </thead>
        <tbody id="resultsBody" data-ssimplename="results">
            <tr>
                <td>1</td>
                <td align="center" class="nosel"><img style="width: 125px;" src="http://www.vanderburghassessor.org/assessor_images/12/180/34/213/020/12-180-34-213-020-S.jpg"></td>
                <td align="center">5830 N KERTH AVE</td>
                <td align="center">82-06-04-034-213.020-020</td>
            </tr>
        </tbody>
    </table>
    

2 个答案:

答案 0 :(得分:1)

您可以使用jQuery中的.not()函数。

$('myElements').not('myExcludedElements');

<强>更新

由于某种原因,JSFiddle不会为我加载,所以这里是在CodePen中。

Example

答案 1 :(得分:0)

我决定采用另一种方式。

我没有从选择中删除Image列,而是在进行选择时将图像转换为URL字符串:

`

for (i = 0; i < imgs.length; i++) {
    var urlT = $(imgs[i]).attr('src');
    $(imgs[i]).hide();
    $(imgs[i]).parent().text(urlT);
}

`

这样,如果实际上有人想要它,URL仍然存在于图像中。

唯一的问题是在清除选择后尝试恢复图像。我尝试添加.on()函数,但它不想正常工作:

`

$('body').on('click', function () {
    if ($("#" + curTable + " img:hidden").length > 0) {
        var imgs = $('#' + curTable + " img:hidden");
        for (i = 0; i < imgs.length; i++) {
            $(imgs[i]).parent().text() = '';
            imgs[i].show();
        }
    }
});

`

我可以处理它而不是恢复,但显然我更愿意,如果它。