我正在使用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 */
}
})
我对这件事的任何想法都很满意。
答案 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');
});
};