Heim Web-Frontend js-Tutorial Eine kurze Diskussion über die relevanten Kenntnisse zu Show- und Chain-Calls in jQuery

Eine kurze Diskussion über die relevanten Kenntnisse zu Show- und Chain-Calls in jQuery

May 16, 2016 am 08:59 AM
jquery Kettenruf

In diesem Artikel erfahren Sie mehr über Show- und Chain-Aufrufe in jQuery. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Eine kurze Diskussion über die relevanten Kenntnisse zu Show- und Chain-Calls in jQuery

jQuery wird schon seit langem verwendet, aber die Implementierung einiger APIs ist wirklich schwer herauszufinden. Im Folgenden wird vereinfachter Code verwendet, wobei der Schwerpunkt hauptsächlich auf den Implementierungsideen von jQuery liegt.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

(function(window, undefined){

function jQuery(sel){

return new jQuery.prototype.init(sel);

}

jQuery.prototype = {

constructor: jQuery,

init: function(sel){

if(typeof sel === 'string'){

var that = this;

var nodeList = document.querySelectorAll(sel);

Array.prototype.forEach.call(nodeList, function(val, i){

that[i] = val;

})

this.selector = sel;

this.length = nodeList.length;

}

},

show: function(){

Array.prototype.forEach.call(this, function(node){

//if(node.style) continue; //textnode没有style

//删除style上的display:none

var display = node.style.display;

if(display === 'none'){

//dispaly置为空后,css如果有display则css的生效

//否则默认的生效

node.style.display = '';

}

//元素display值为非默认值情况,需要还原为oldDisplay:div->display:inline-block

//或 检测css上的display是否为none

if(node.style.display==='' || isHidden(node)){

//有oldDispaly则设置

if(node.oldDisplay) node.style.display = node.oldDisplay;

//没有则设置为元素默认值或元素当前值

else node.style.display = getDisplay(node);

}

})

//链式调用

return this;

},

hide: function(){

Array.prototype.forEach.call(this, function(node){

if(!isHidden(node)) {

//jQuery使用其cache机制存储信息,这里简化一下

//直接挂载在对应的dom下

node.oldDisplay = getDisplay(node);

node.style.display = 'none';

}

})

return this;

}

}

function getDisplay(node){

var display = window.getComputedStyle(node, null).getPropertyValue('display');

if(display === 'none'){

var dom = document.createElement(node.nodeName);

//插入到body中

document.body.appendChild(dom);

//即可获取到元素display的默认值

var display = window.getComputedStyle(dom, null).getPropertyValue('display');

document.body.removeChild(dom);

}

return display;

}

function isHidden(node) {

//忽略未append进document的元素这种隐藏情况:$(&#39;<div>block</div>&#39;)未append

return window.getComputedStyle(node, null).getPropertyValue(&#39;display&#39;) === &#39;none&#39;;

}

jQuery.prototype.init.prototype = jQuery.prototype;

window.$ = jQuery;

})(window);

Nach dem Login kopieren

Erstes Aufwärmen mit der Funktion Ausblenden. Wie im vorherigen Artikel erwähnt, verarbeitet jQuery die erhaltene Knotenliste in ein Array. Daher verwenden wir zunächst forEach, um jeden Knoten im Array zu verarbeiten.

Als nächstes müssen wir nur noch die style.display jedes Knotens auf „none“ setzen, um ihn auszublenden. Ziemlich einfach, oder? (⊙0⊙) . Ignorieren Sie oldDisplay und geben Sie dies vorerst zurück╰( ̄▽ ̄)╮

1

2

3

4

5

6

7

8

9

10

11

hide: function(){

Array.prototype.forEach.call(this, function(node){

if(!isHidden(node)) {

//jQuery使用其cache机制存储信息,这里简化一下

//直接挂载在对应的dom下

node.oldDisplay = getDisplay(node);

node.style.display = &#39;none&#39;;

}

})

return this;

}

Nach dem Login kopieren

wobei isHidden verwendet wird, um zu bestimmen, ob das Element ausgeblendet ist: Es besteht keine Notwendigkeit, Elemente zu verarbeiten, die bereits ausgeblendet sind. Überspringen Sie einfach

1

2

3

4

function isHidden(node) {

//忽略未append进document的元素这种隐藏情况:$(&#39;<div>block</div>&#39;)未append

return window.getComputedStyle(node, null).getPropertyValue(&#39;display&#39;) === &#39;none&#39;;

}

Nach dem Login kopieren

--------------------------

Als nächstes gehen wir etwas umständlich vor zeigen. Stellen Sie zunächst eine Frage, um eine Reihe von Fragen auszulösen:

Ein bestimmtes Element ausblenden erfordert nur display:none, aber was ist mit show?

Ist display:block nicht genug? Dadurch wird das Element tatsächlich angezeigt. Was aber, wenn der ursprüngliche Wert des Elements display:inline ist?

Würde es nicht ausreichen, den ursprünglichen Wert bei hide zu speichern? Genau wie der folgende Code:

1

node.oldDisplay = getDisplay(node);

Nach dem Login kopieren

Was passiert, wenn hide nicht ausgeführt wird, bevor show ausgeführt wird? Wäre zum Beispiel in der folgenden Situation kein oldDisplay vorhanden? (⊙0⊙)

1

2

3

4

<style>

div{ display:none; }

</style>

<div>display:none</div>$(&#39;div&#39;).show()

Nach dem Login kopieren

Okay, der entscheidende Punkt ist hier: Wir können einfach den Standardwert der Elementanzeige erhalten, Rechts? Beispielsweise ist p standardmäßig auf „Block“ und „Span“ auf „Inline“ eingestellt.

Da wir nun die Idee haben, lautet die nächste Frage: Wie erhalte ich den Standardwert der Elementanzeige?

Hehehehe, fällt dir das nicht ein? Hier ist ein kleiner Trick erforderlich. Die allgemeine Idee lautet wie folgt: Erstellen Sie über nodeName ein neues Etikett und rufen Sie es dann ab.

Es gibt einen Ort, der weiter optimiert werden kann. Nachdem getDisplay den Standardanzeigewert des Elements erhalten hat, kann es mithilfe des Cache-Mechanismus von jQuery gespeichert werden (tatsächlich tut dies auch jQuery).

1

2

3

4

5

6

7

8

9

10

11

12

function getDisplay(node){

var display = window.getComputedStyle(node, null).getPropertyValue(&#39;display&#39;);

if(display === &#39;none&#39;){

var dom = document.createElement(node.nodeName);

//插入到body中

document.body.appendChild(dom);

//即可获取到元素display的默认值

var display = window.getComputedStyle(dom, null).getPropertyValue(&#39;display&#39;);

document.body.removeChild(dom);

}

return display;

}

Nach dem Login kopieren

Dann kombinieren Sie diese beiden Situationen:

1

2

3

4

//有oldDispaly则设置

if(node.oldDisplay) node.style.display = node.oldDisplay;

//没有则设置为元素默认值或元素当前值

else node.style.display = getDisplay(node);

Nach dem Login kopieren

Denken Sie, das ist das Ende? NEIN, die Situation der Show-Funktion ist ziemlich kompliziert. Wir müssen uns im Allgemeinen mit diesen Situationen auseinandersetzen:

1

2

3

4

5

6

7

8

9

10

<style>

#none,#none2{ display: none; }

</style>

<body>

<div id="div">默认值为block</div>

<span id="span">默认值为inline</span>

<div id="div2" style="display:inline-block;">修改为inline-block</div>

<div id="none">通过css隐藏了</div>

<div id="none2" style="display:none">通过css和style隐藏了</div>

</body>

Nach dem Login kopieren

Am Ende wurde aus der Show-Funktion dieses seltsame ψ(╰_╯). Die allgemeine Idee ist wie folgt:

Eine kurze Diskussion über die relevanten Kenntnisse zu Show- und Chain-Calls in jQuery

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

show: function(){

Array.prototype.forEach.call(this, function(node){

//if(node.style) continue; //textnode没有style

//删除style上的display:none

var display = node.style.display;

if(display === &#39;none&#39;){

//dispaly置为空后,css如果有display则css的生效

//否则默认的生效

node.style.display = &#39;&#39;;

}

//元素display值为非默认值情况,需要还原为oldDisplay:div->display:inline-block

//或 检测css上的display是否为none

if(node.style.display===&#39;&#39; || isHidden(node)){

//有oldDispaly则设置

if(node.oldDisplay) node.style.display = node.oldDisplay;

//没有则设置为元素默认值或当前值

else node.style.display = getDisplay(node);

}

})

}

Nach dem Login kopieren

---------------------- -- -

Kettenruf ähnelt dieser Situation:

1

$(&#39;div&#39;).show().hide().css(&#39;height&#39;,&#39;300px&#39;).toggle()

Nach dem Login kopieren

ist sehr einfach umzusetzen, solange jede Funktion Geben Sie dies einfach später zurück

----------------------------------------

Ja, der Klassenkamerad sagte: Hallo! Ist das nicht das Einblenden und Verstecken, oder? Habe ich den Zeitparameter übersehen? Verwenden Sie setTimeOut, um es selbst zu implementieren~>_<~+.

Der Hauptzweck dieses Abschnitts besteht darin, alle wissen zu lassen, dass es viele Situationen gibt, die jQuery berücksichtigen muss (eine Menge Drecksarbeit). Auch wenn der Code vereinfacht ist, ist er immer noch so lang.

Nachdem ich mit dem Schreiben fertig war, stellte ich fest, dass es eine andere Situation gibt, die nicht berücksichtigt wurde:

1

2

div{ display:none !important; }

<div>大家自己开脑洞,怎么处理吧(⊙0⊙)</div>

Nach dem Login kopieren

Empfohlene verwandte Video-Tutorials: jQuery-Tutorial (Video )

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ausführliche Erläuterung der jQuery-Referenzmethoden: Kurzanleitung Ausführliche Erläuterung der jQuery-Referenzmethoden: Kurzanleitung Feb 27, 2024 pm 06:45 PM

Detaillierte Erläuterung der jQuery-Referenzmethode: Kurzanleitung jQuery ist eine beliebte JavaScript-Bibliothek, die häufig in der Website-Entwicklung verwendet wird. Sie vereinfacht die JavaScript-Programmierung und bietet Entwicklern umfangreiche Funktionen und Features. In diesem Artikel wird die Referenzmethode von jQuery ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern einen schnellen Einstieg zu erleichtern. Einführung in jQuery Zuerst müssen wir die jQuery-Bibliothek in die HTML-Datei einführen. Es kann über einen CDN-Link eingeführt oder heruntergeladen werden

Wie verwende ich die PUT-Anfragemethode in jQuery? Wie verwende ich die PUT-Anfragemethode in jQuery? Feb 28, 2024 pm 03:12 PM

Wie verwende ich die PUT-Anfragemethode in jQuery? In jQuery ähnelt die Methode zum Senden einer PUT-Anfrage dem Senden anderer Arten von Anfragen, Sie müssen jedoch auf einige Details und Parametereinstellungen achten. PUT-Anfragen werden normalerweise zum Aktualisieren von Ressourcen verwendet, beispielsweise zum Aktualisieren von Daten in einer Datenbank oder zum Aktualisieren von Dateien auf dem Server. Das Folgende ist ein spezifisches Codebeispiel, das die PUT-Anforderungsmethode in jQuery verwendet. Stellen Sie zunächst sicher, dass Sie die jQuery-Bibliotheksdatei einschließen. Anschließend können Sie eine PUT-Anfrage senden über: $.ajax({u

Wie entferne ich das Höhenattribut eines Elements mit jQuery? Wie entferne ich das Höhenattribut eines Elements mit jQuery? Feb 28, 2024 am 08:39 AM

Wie entferne ich das Höhenattribut eines Elements mit jQuery? Bei der Front-End-Entwicklung müssen wir häufig die Höhenattribute von Elementen manipulieren. Manchmal müssen wir möglicherweise die Höhe eines Elements dynamisch ändern, und manchmal müssen wir das Höhenattribut eines Elements entfernen. In diesem Artikel wird erläutert, wie Sie mit jQuery das Höhenattribut eines Elements entfernen, und es werden spezifische Codebeispiele bereitgestellt. Bevor wir jQuery zum Betreiben des Höhenattributs verwenden, müssen wir zunächst das Höhenattribut in CSS verstehen. Das Höhenattribut wird verwendet, um die Höhe eines Elements festzulegen

jQuery-Tipps: Ändern Sie schnell den Text aller a-Tags auf der Seite jQuery-Tipps: Ändern Sie schnell den Text aller a-Tags auf der Seite Feb 28, 2024 pm 09:06 PM

Titel: jQuery-Tipps: Ändern Sie schnell den Text aller Tags auf der Seite. In der Webentwicklung müssen wir häufig Elemente auf der Seite ändern und bedienen. Wenn Sie jQuery verwenden, müssen Sie manchmal den Textinhalt aller a-Tags auf der Seite gleichzeitig ändern, was Zeit und Energie sparen kann. Im Folgenden wird erläutert, wie Sie mit jQuery den Text aller Tags auf der Seite schnell ändern können, und es werden spezifische Codebeispiele angegeben. Zuerst müssen wir die jQuery-Bibliotheksdatei einführen und sicherstellen, dass der folgende Code in die Seite eingefügt wird: &lt

Verwenden Sie jQuery, um den Textinhalt aller a-Tags zu ändern Verwenden Sie jQuery, um den Textinhalt aller a-Tags zu ändern Feb 28, 2024 pm 05:42 PM

Titel: Verwenden Sie jQuery, um den Textinhalt aller Tags zu ändern. jQuery ist eine beliebte JavaScript-Bibliothek, die häufig zur Verarbeitung von DOM-Operationen verwendet wird. Bei der Webentwicklung müssen wir häufig den Textinhalt des Link-Tags (eines Tags) auf der Seite ändern. In diesem Artikel wird erläutert, wie Sie mit jQuery dieses Ziel erreichen, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir die jQuery-Bibliothek in die Seite einführen. Fügen Sie den folgenden Code in die HTML-Datei ein:

Verkettete Aufrufe und Schließungen von PHP-Funktionen Verkettete Aufrufe und Schließungen von PHP-Funktionen Apr 13, 2024 am 11:18 AM

Ja, die Einfachheit und Lesbarkeit des Codes können durch verkettete Aufrufe und Abschlüsse optimiert werden: Verkettete Aufrufe verknüpfen Funktionsaufrufe in einer fließenden Schnittstelle. Abschlüsse erstellen wiederverwendbare Codeblöcke und greifen auf Variablen außerhalb von Funktionen zu.

Wie kann man feststellen, ob ein jQuery-Element ein bestimmtes Attribut hat? Wie kann man feststellen, ob ein jQuery-Element ein bestimmtes Attribut hat? Feb 29, 2024 am 09:03 AM

Wie kann man feststellen, ob ein jQuery-Element ein bestimmtes Attribut hat? Wenn Sie jQuery zum Betreiben von DOM-Elementen verwenden, stoßen Sie häufig auf Situationen, in denen Sie feststellen müssen, ob ein Element ein bestimmtes Attribut hat. In diesem Fall können wir diese Funktion einfach mit Hilfe der von jQuery bereitgestellten Methoden implementieren. Im Folgenden werden zwei häufig verwendete Methoden vorgestellt, um festzustellen, ob ein jQuery-Element über bestimmte Attribute verfügt, und um spezifische Codebeispiele anzuhängen. Methode 1: Verwenden Sie die Methode attr() und den Operator typeof //, um zu bestimmen, ob das Element ein bestimmtes Attribut hat

Verstehen Sie die Rolle und Anwendungsszenarien von eq in jQuery Verstehen Sie die Rolle und Anwendungsszenarien von eq in jQuery Feb 28, 2024 pm 01:15 PM

jQuery ist eine beliebte JavaScript-Bibliothek, die häufig zur DOM-Manipulation und Ereignisbehandlung in Webseiten verwendet wird. In jQuery wird die Methode eq() verwendet, um Elemente an einer bestimmten Indexposition auszuwählen. Die spezifischen Verwendungs- und Anwendungsszenarien sind wie folgt. In jQuery wählt die Methode eq() das Element an einer angegebenen Indexposition aus. Indexpositionen beginnen bei 0 zu zählen, d. h. der Index des ersten Elements ist 0, der Index des zweiten Elements ist 1 und so weiter. Die Syntax der eq()-Methode lautet wie folgt: $("s

See all articles