0

我正在尝试使用以下代码选择/突出显示表中的所有 tds(用于复制),但出现此错误

Failed to execute 'selectNode' on 'Range': parameter 1 is not of type 'Node'.

你能告诉我我在这里做错了什么吗?

function selectElementContents(el) {
    var body = document.body, range, sel;
    if (document.createRange && window.getSelection) {
        range = document.createRange();
        sel = window.getSelection();
        sel.removeAllRanges();
        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();
    }
}

$("#select").on("click", function(){
  selectElementContents($("#table"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table" border=1>
    <thead>
        <tr><th>Heading</th><th>Heading</th></tr>
    </thead>
    <tbody>
        <tr><td>cell</td><td>cell</td></tr>
    </tbody>
</table>

<input type="button" value="select table" id="select" />

4

1 回答 1

2

您当前在调用时传入了一个 jQuery 集合selectElementContents

selectElementContents($("#table"));

相反,您应该传入一个实际的node

selectElementContents($("#table").get(0));
于 2020-04-24T09:31:37.110 回答