Heim > Web-Frontend > js-Tutorial > Hauptteil

JavaScript-Methode zum Implementieren eines Rückrufs zum Durchqueren von Webseiten-Unterseiten (einschließlich window.frames, rekursiver Funktionen, Funktionskontext)_Javascript-Kenntnisse

WBOY
Freigeben: 2016-05-16 15:48:41
Original
1828 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt, wie JavaScript Rückrufe zum Durchlaufen von Webseiten-Unterseiten implementiert (einschließlich window.frames, rekursiver Funktionen und Funktionskontext). Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Es wurde aus einem von mir selbst geschriebenen reinen JavaScript-Toolprogramm extrahiert und wird zum Durchlaufen aller Unterseiten der aktuellen Webseite und zum Ausführen iterativer Rückrufe verwendet. Der Rückgabewert der Rückruffunktion kann zur Ergebnisrückgabe verwendet werden, was dazu beiträgt Abschlussvariablen reduzieren~

Sein Merkmal ist, dass beim rekursiven Durchlaufen nur das Window-Objekt der Unterseite abgerufen wird und die Rückruffunktion nicht sofort ausgeführt wird, sondern nach Abschluss des Abrufs in der normalen Schleifenstruktur zurückgerufen wird. Dies kann den Speicherverbrauch bei rekursiven Aufrufen minimieren, die Programmstruktur vereinfachen und die Wartung vereinfachen

Globale Funktion Frame_Each( CallBack ):

(function (BOM) {
  function All_Frames(iWindow) {
    var _Frames_ = [].slice.call(iWindow.frames, 0);
    for (var i = 0; i < _Frames_.length; i++)
      _Frames_ = _Frames_.concat( arguments.callee(_Frames_[i]) );
    return _Frames_;
  }
  BOM.Frame_Each = function (CallBack) {
    var Frames = [this].concat( All_Frames(this) );
    if (! CallBack) return Frames;
    for (var i = 0, CBR; i < Frames.length; i++) {
      try { Frames[i].name; } catch (iError) { continue; }
      CBR = CallBack.apply(Frames[i], [].slice.call(arguments, 1));
      if (CBR === false) break;
      else if (CBR === undefined) continue;
      return CBR;
    }
  };
})(self);

Nach dem Login kopieren

Anwendungsbeispiel:

// 无参数 —— 返回一个数组,包含函数调用所在的 Window 对象及其子页面的 Window,其顺序同递归遍历
var Pages = Frame_Each();
console.log( Pages.length );
// 定义回调 —— 回调返回值功能与普通循环语句的对应:
//  1. undefined:continue
//  2. false:break
//  3. 其它任何值:break && return Value
var Search_Result = Frame_Each(function () {
  var iFocus = this.document.activeElement;
  switch ( iFocus.tagName.toLowerCase() ) {
    case 'body':   return false;
    case 'iframe':  return;
  }
  return iFocus;
});
Search_Result.innerHTML = 'Hello, Focus!';

Nach dem Login kopieren

Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!