Friday, 22. May 2009, 11:49:08
opera, IE, Firefox, JavaScript
console.log 原先是 Firefox 的“专利”,严格说是安装了 Firebugs 之后的 Firefox 所独有的调试“绝招”。
这一招,IE8 学会了,不过用起来比 Firebugs 麻烦,只有在开启调试窗口(F12)的时候,console.log 才能出结果,不然就报错。
今天看到 Opera 也有个叫
dragonfly 的东东,用这东西查看 DOM,已经可以和 Firebug 媲美,然而还是不能用 console.log。于是有人就提供了这样两句代码:
window.console = window.console || {};
console.log || (console.log = opera.postError);
经测试,以上代码好使。
至此,Firefox/IE/Opera 都能用上 console.log 了。
当然,IE 和 Opera 下的 console.log 比起 Firebugs 原创的 console.log,还是太过简单,比如参数是 Object 或者数组就没有进一步的显示功能。
Monday, 5. May 2008, 15:21:12
jQuery, IE, JavaScript
可编辑 div 内光标位置的记忆和恢复实在是太难,情急之下想了个很土的办法:做一个不可见的 span 紧跟光标,在光标位置插入内容的时候只需找到这个 span 即可。
程序如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>(jQuery) Cursor Position Test </title>
<script type="text/javascript" src="jquery.pack.js"></script>
<style type="text/css" media="all">
#editor {
width:500;
height:100;
margin:10px;
padding:2px;
border:1px solid #0000FF;
overflow:auto;
}
#info {
width:500;
height:200;
margin:10px;
padding:2px;
border:1px solid #00FF00;
background-color:#F8F8F8;
overflow:auto;
}
#caret_pos {
display:none;
cursor:default;
}
</style>
<script type="text/javascript">
function trace(obj) {
if(typeof(obj) == 'object') {
for(var x in obj) {
$('#info').append(x + '<br/>');
}
} else {
$('#info').append(obj + '<br/>');
}
}
$(document).ready(function(){
var caretRange;
//update Caret Pos
function updateCaretPos(e) {
caretRange = document.selection.createRange();
if(caretRange.text != '') {
return;
}
var caretHtml = '<span id="caret_pos"></span>';
if($('#caret_pos').length > 0) {
$('#caret_pos').remove();
}
caretRange = document.selection.createRange();
caretRange.pasteHTML(caretHtml);
caretRange.collapse(true);
}
//insert HTML at Caret Pos
function insertAtCaret(sHtml) {
$('#caret_pos').before(sHtml);
var caret = document.getElementById('caret_pos');
var txtRange = document.body.createTextRange();
txtRange.moveToElementText(caret);
txtRange.select();
}
$('#editor').keyup(function(e){
updateCaretPos(e);
}).click(function(e){
updateCaretPos(e);
}).focus(function(e){
updateCaretPos(e);
});
$('#insert').click(function(e){
insertAtCaret($('#instext').val());
});
$('#editor_html').click(function(e){
$('#info').text($('#editor').html());
});
$('#clear_info').click(function(e){
$('#info').html('');
});
});
</script>
</head>
<body>
<div><h2>Caret Position Test</h2></div>
<div id="editor" contentEditable="true">
<span>start</span>
</div>
<input type="button" id="editor_html" value="Html in Editor" />
<input type="text" id="instext" value="" />
<input type="button" id="insert" value="Insert" />
<div id="info">
</div>
<input type="button" id="clear_info" value="Clear Info" />
</body>
</html>
注:以上程序仅适用于IE。Mozilla系浏览器只需修改pasteHTML部分的代码