ホームページ  >  記事  >  ウェブフロントエンド  >  IE8 プロンプトが無効なプロシージャ呼び出しまたは引数例外 solution_javascript スキル

IE8 プロンプトが無効なプロシージャ呼び出しまたは引数例外 solution_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 17:49:341684ブラウズ
1. 環境:
browser_info:"platform:Win32;msie;version:8.0;ie",
navigator:"appCodeName:Mozilla;appName:Microsoft Internet Explorer;appMinorVersion:Release Candidate 1;cpuClass:x86;プラットフォーム:Win32;systemLanguage:zh-cn;userLanguage:zh-cn;appVersion:4.0 (互換性; MSIE 8.0; Windows NT 5.1; Tridentu002F4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729);userAgent:Mozillau002F4.0 (互換性; MSIE 8.0; Windows NT 5.1; Tridentu002F4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0。 4506.2152; .NET CLR 3.5.30729);onLine:true;cookieEnabled:true"
2. 错误代码:
复制代码 代码如下:




alert(document.body.querySelectorAll);
var els = document.body.querySelectorAll('div');
alert(els[2]);// 2 > els.length-1



3. 原因分析:
上のコードでは、els は querySelectorAll の結果です。els[2] は、未定義を返すのではなく、頻繁に発生します。

4. QWrap のセレクターで、querySelectorAll の結果が下位の境界を取得する可能性があります。
* @returns
*/
functionネイティブQuery(refEl, sSelector) {
if (hasNativeQuery && /^((^|,)s*[.w-][.ws-> ~]*) $/.test(sSelector)) {
//如果浏览器自带有querySelectorAll 、そして、今回のクエリは単一のセレクターであり、セレクターを直接調整して
// 一部のデバイスはサポートされていません">~ "最初のシステム計算符
var oldId = refEl.id,
tempId、
arr = []、
els;
if (!oldId && refEl.parentNode) { //標準のquerySelectorAll 内のセレクターは、:scope ではなく、:root に対応しています。
try {
els = refEl.querySelectorAll('#' tempId ' ' sSelector);
} 最後に {
refEl.removeAttribute('id');
}
}
else{
els = refEl.querySelectorAll(sSelector);
}
for (var i = 0, elI; elI = els[i ];) arr.push(elI);
arr を返します;
}
null を返します。
}



5. 反思:

代码A:for (var i = 0, len = els.length; i < len; i ) arr.push(els[i]);
代金B:for (var i = 0, elI; elI = els[i ];) arr.push(elI);
は、「代コード A」の代わりに「代コード B」を使用します。これは、このマシンに組み込まれ、変更が実行される可能性があります。 修正:

老老実装の変更コード A。OK 完了。
7. 拡張子:

「未定義を返すのではなく、下にある境界が常に表示されます」この坑道は好都合です。原因。友情@淘宝同学一下。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。