我正在使用以下内容在我的应用程序中选择一个表元素,供用户将表拖放到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。
所以有两个问题:
这是否可能?
有没有比addRange更好的方法?我试过延伸但是没有用。
根据要求,这是我的表格的一个例子:
<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>
答案 0 :(得分:1)
您可以使用jQuery中的.not()函数。
$('myElements').not('myExcludedElements');
<强>更新强>
由于某种原因,JSFiddle不会为我加载,所以这里是在CodePen中。
答案 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();
}
}
});
`
我可以处理它而不是恢复,但显然我更愿意,如果它。