利用 TextRange 对象的 offsetXXX 特性和其它对象的 offsetXXX 特性,判断矩形的位置包含关系:
<input type="button" id="a" onclick="kk()" value="test"><br>
<input type="button" value="show" onclick="kk()"><br>
<input type="text" id="oTxt"><br>
<div id="oDiv">
afdasdfsadf
asdfasdfasdf
asfdasdfa
</div>
<script language="javascript">
function kk()
{
    var err = 2;
    var rng = document.selection.createRange();
    var rx0 = rng.boundingLeft, ry0 = rng.boundingTop, rw = rng.boundingWidth, rh = rng.boundingHeight, rx1 = rx0 + rw, ry1 = ry0 + rh;
    var tx0 = oTxt.offsetLeft-err, ty0 = oTxt.offsetTop-err, tw = oTxt.offsetWidth+err*2, th = oTxt.offsetHeight+err*2, tx1 = tx0 + tw, ty1 = ty0 + th;
    var dx0 = oDiv.offsetLeft-err, dy0 = oDiv.offsetTop-err, dw = oDiv.offsetWidth+err*2, dh = oDiv.offsetHeight+err*2, dx1 = dx0 + dw, dy1 = dy0 + dh;
    if ( tx0 <= rx0 && ty0 <= ry0 && rx1 <= tx1 && ry1 <= ty1 )
        alert('selection in <input>');
    else if ( dx0 <= rx0 && dy0 <= ry0 && rx1 <= dx1 && ry1 <= dy1 )
        alert('selection in <div>');
    else
        alert('selection in other');
}
</script>