素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

pre要素をダブルクリックで選択する

// ==UserScript==
// @name           BetterDoubleClick
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http*
// ==/UserScript==

document.addEventListener("dblclick",
  function({target: elem}){
    elem = document.evaluate(
      "ancestor-or-self::code|ancestor-or-self::pre",
      elem,
      null,
      XPathResult.FIRST_ORDERED_NODE_TYPE,
      null).singleNodeValue;

    if(!elem) return;
    window.getSelection().selectAllChildren(elem);
  }, false);

XPathの部分は

do
  if(/code/i.test(elem.localName)) break;
while(elem = elem.parentNode);

みたいに書いてもいい。