有没有办法在 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');
});
};
我正在使用 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');
});
};