有没有办法在 keydown 的语法高亮器中触发代码上的 dblclik 事件?

Is there a way to trigger the dblclik event on code in syntax highlighter on keydown?

我正在使用 http://alexgorbatchev.com/SyntaxHighlighter/。 它有一个功能,在 dblclik 上突出显示的文本上,所有这些都被选中: how it looks when doubleclicking on higlighted text

我想通过在按键按下时触发 dblclick 来达到同样的效果,这可行吗?

我设法捕捉到按键事件:

$(window).keydown(function(e) {
    if(e.ctrlKey && e.keyCode == 65) {
        console.log("Ctrl+A event captured");
        e.preventDefault();
        /* but I dont know how to proceed */
    }
})

我很高兴有任何关于此事的想法。

如果你想扩展 SyntaxHighlighter,你可以在 GitHub 上分叉它并修改它。

注册一个免费 GitHub 帐户,如果您没有帐户,请访问 project page,然后单击 Fork 按钮。

您也可以只下载 .ZIP 并修改源代码。你要的文件在src/core.js

附加dblclick的代码在core.js

  if (params.quickCode)
    dom.attachEvent(dom.findElement(element, '.code'), 'dblclick', dom.quickCodeHandler);

在这个项目的分支中,只需添加:

  dom.attachEvent(dom.findElement(element, '.code'), 'keydown',   
    function(e)
    {
      if(e.ctrlKey && e.keyCode == 65) {
        console.log("Ctrl+A event captured");
        e.preventDefault();
        dom.quickCodeHandler();
        return false;
    }
  });

作为参考,完成工作的代码在 dom.js

/**
 * Quick code mouse double click handler.
 */
function quickCodeHandler(e)
{
  var target = e.target,
    highlighterDiv = findParentElement(target, '.syntaxhighlighter'),
    container = findParentElement(target, '.container'),
    textarea = document.createElement('textarea'),
    highlighter
    ;

  if (!container || !highlighterDiv || findElement(container, 'textarea'))
    return;

  //highlighter = highlighters.get(highlighterDiv.id);

  // add source class name
  addClass(highlighterDiv, 'source');

  // Have to go over each line and grab it's text, can't just do it on the
  // container because Firefox loses all \n where as Webkit doesn't.
  var lines = container.childNodes,
    code = []
    ;

  for (var i = 0, l = lines.length; i < l; i++)
    code.push(lines[i].innerText || lines[i].textContent);

  // using \r instead of \r or \r\n makes this work equally well on IE, FF and Webkit
  code = code.join('\r');

    // For Webkit browsers, replace nbsp with a breaking space
    code = code.replace(/\u00a0/g, " ");

  // inject <textarea/> tag
  textarea.appendChild(document.createTextNode(code));
  container.appendChild(textarea);

  // preselect all text
  textarea.focus();
  textarea.select();

  // set up handler for lost focus
  attachEvent(textarea, 'blur', function(e)
  {
    textarea.parentNode.removeChild(textarea);
    removeClass(highlighterDiv, 'source');
  });
};