LoginSignup
1
1

More than 5 years have passed since last update.

IE10での範囲選択の検証(Table要素関係)

Posted at

背景

仕事でIE10対象のWEBシステムを作っています。
「ボタンを押したらTable要素が範囲選択されて、Excelにコピペできるよ~」という機能があるのですが、ちょっとハマったので、まとめてみました。

問題

Table要素を範囲選択すると、「SCRIPT606: エラー 800a025e のため操作を完了できませんでした。」というエラーが発生します。

コード

test.js
/**
 * 対象の要素を範囲選択する。(IE10用)
 */
function selectRange(elm) {
  if (typeof elm === "string") {elm = document.getElementById(elm);}
  var range = document.selection.createRange();
  range.moveToElementText(elm);
//「SCRIPT606: エラー 800a025e のため操作を完了できませんでした。」というエラーの発生箇所
  range.select();  
}
test.html
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<script src="test.js"></script>
</head>
<body>
<div id="sampleDiv">
 Inner DIV
<table id="sampleTable">
  <thead id="sampleTHead">
    <tr id="sampleHeadRow">
      <th id="sampleHeadCell">ID</th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody id="sampleTBody">
    <tr id="sampleBodyRow">
      <td id="sampleBodyCell">1</td>
      <td>Taro</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Jiro</td>
    </tr>
  </tbody>
</table>
</div>
<span id="sampleText">Sample Text</span>
</body>
</html>

結果

選択対象によって成功するときと失敗するときがあります。
それをまとめました。

選択対象 実行した処理 成功/失敗
Table要素を囲むDiv要素 selectRange("sampleDiv"); 成功
Table要素 selectRange("sampleTable"); 失敗
TBody要素 selectRange("sampleTBody"); 失敗
THead要素 selectRange("sampleTHead"); 失敗
THead内のtr要素 selectRange("sampleHeadRow"); 失敗
THead内のth要素 selectRange("sampleHeadCell"); 成功
TBody内のtr要素 selectRange("sampleBodyRow"); 失敗
TBody内のtd要素 selectRange("sampleBodyCell"); 成功

失敗するときは、range.select();の処理で、「SCRIPT606: エラー 800a025e のため操作を完了できませんでした。」というエラーが発生します。

考察

Table要素を囲むDIV要素を選択対象にしたら、解決できました。

td/th要素なら選択できましたが、tr/tbody/thead/table要素は選択できませんでした。
規則性はよく分かりません。

そもそもFirefoxやIE11なら、このような問題は発生しないので、調査はここまでにします。
早く対象ブラウザをIE11にして~

参考サイト

https://teratail.com/questions/30270
http://stackoverflow.com/questions/22914075/javascript-error-800a025e-using-range-selector

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1