以前没注意过,认为jquery 中的 $("#") 与 document.getElementById("") 是一回事,指的是同一个东西。
这次在使用Web条码打印控件LODOP的时候,发现两者不同,使用时需要注意!
页面引入了LODOP
<object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0" height="0">
<embed id="LODOP_EM" type="application/x-print-lodop" width="0" height="0" pluginspage="install_lodop32.exe"></embed>
</object>
通过以下测试:
js中代码片段:
function getLodop(oOBJECT, oEMBED) {
var isIE = (navigator.userAgent.indexOf('MSIE') >= 0) || (navigator.userAgent.indexOf('Trident') >= 0);
var is64IE = isIE && (navigator.userAgent.indexOf('x64') >= 0);
//=====如果页面有Lodop就直接使用,没有则新建:==========
if (oOBJECT != undefined || oEMBED != undefined) {
if (isIE)
LODOP = oOBJECT;
else
LODOP = oEMBED;
}
//=====判断Lodop插件是否安装过,没有安装或版本过低就提示下载安装:==========
if ((LODOP == null) || (typeof (LODOP.Version) == "undefined")) {
if (is64IE) {
lodopInstallMessage = strHtm64_Install + "<br>" + lodopInstallMessage;
} else {
lodopInstallMessage = strHtmInstall + "<br>" + lodopInstallMessage;
}
return LODOP;
}
}
调试发现,如果我通过:
LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));进行调用时候,上述正常;
通过:
LODOP = getLodop($("#LODOP_OB"), #("LODOP_EM"));进行调用时typeof (LODOP.Version) == "undefined"这个条件为真!
通过跟踪LODOP发现如下事实:
$("#LODOP_OB")[0]等同于document.getElementById('LODOP_OB')
发现这个事实,耗费了宝贵的3小时,我香菇