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

时间:2015-10-15 13:24:28

标签: jquery selection double-click syntaxhighlighter

我正在使用http://alexgorbatchev.com/SyntaxHighlighter/。 它有一个功能,在高亮文本上的dblclik上,所有选中它: how it looks when doubleclicking on higlighted text

我想通过在keydown上触发dblclick来达到同样的效果,这是可行的吗?

我设法赶上了keydown事件:

$(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 */
    }
})

我对这件事的任何想法都很满意。

1 个答案:

答案 0 :(得分:0)

如果你想扩展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');
  });
};