Maison  >  Article  >  interface Web  >  données d'amorçage - jquery .data_jquery

données d'amorçage - jquery .data_jquery

WBOY
WBOYoriginal
2016-05-16 16:42:211320parcourir

La description de la fonction .data sur le site officiel de jquery est la suivante : stocker toutes les données pertinentes sur l'élément correspondant ou renvoyer la valeur stockée dans les données du prénom du premier élément de l'ensemble d'éléments correspondant.

Clé/valeur de stockage :

  $("body").data("foo", 52);
  $("body").data("bar", { myType: "test", count: 40 });
  $("body").data({ baz: [ 1, 2, 3 ] });


Obtenez la valeur clé

  $("body").data("foo"); // 52
  $("body").data(); // { foo: 52, bar: { myType: "test", count: 40 }, baz: [ 1, 2, 3 ] }

Ce qui précède est facile à maîtriser et à comprendre. Aujourd'hui, lorsque je regardais le masque contextuel de bootstrap, j'ai rencontré un tel morceau de code qui m'a rendu confus

 $(document).on('click.modal.data-api', '[daTa-toggle="modal"]', function (e) {
  alert($(this).data().toggle) //这行是我加入的代码 打印的值是modal
  var $this = $(this)
   , href = $this.attr('href')
   , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
   , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())  
  e.preventDefault()
  $target
   .modal(option)
   .one('hide', function () {
    $this.focus()
   })
 })

Opérateur ternaire $target.data('modal')?'toggle' dans le code : $.extend({ remote:!/#/.test(href) && href }, $target.data() , $ this.data())

consiste à déterminer si la fenêtre est rendue pour la première fois. Exécuté lors du rendu de la fenêtre pour la première fois

option = $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) //结果是 option= {remote: false,toggle: "modal"}

$target.data() est un objet vide {} et la valeur de $this.data() est {toggle: "modal"}. Il va sans dire ici d'où vient la valeur de retour de $this.data()

En regardant le code html, il s'avère que c'est la même chose que la valeur d'attribut de l'objet dom auquel la méthode click est liée. Ce qui suit est le code html de l'objet dom lié

.

aac23be7491467ec6009169c7eae1a15Lancer la démo modal5db79b134e9f6b82c0b36e0489ee08ed

La valeur imprimée par le code alert($(this).data().toggle) que j'ai ajouté est modale, donc cela ne peut être qu'un article réalisé par jquery, j'ai donc étudié le code source de jquery et j'ai trouvé qu'il c'est effectivement vrai !

Ce qui suit fait partie du code de la fonction jQuery.fn.data Lorsque la clé n'est pas définie, c'est-à-dire lorsque .data() est appelé sans passer de paramètres, la paire clé-valeur dont le nom d'attribut commence par. data- sera stocké dans l’élément correspondant.

Dans ce casaac23be7491467ec6009169c7eae1a15Lancer la démo modale553a280de7202c0dce8dfe871821475e, enregistrez la paire clé-valeur {toggle:"modal"} dans

Les étudiants intéressés peuvent essayer le code jquery suivant

    // Gets all values
    if ( key === undefined ) {
      if ( this.length ) {
        data = jQuery.data( elem );
        if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
          attrs = elem.attributes;
          for ( ; i < attrs.length; i++ ) {
            name = attrs[i].name;
            if ( name.indexOf("data-") === 0 ) {
              name = jQuery.camelCase( name.slice(5) );

              dataAttr( elem, name, data[ name ] );
            }
          }
          jQuery._data( elem, "parsedAttrs", true );
        }
      }
      return data;
    }

J'ai lu en détail le document d'aide du site officiel de jquery et il y a le paragraphe suivant
Données HTML5-* Attributs (Données HTML5-* attributs)
À partir de jQuery 1.4.3, l'attribut data-HTML 5 sera automatiquement référencé dans l'objet de données de jQuery. La façon dont les tirets intégrés gèrent les attributs a changé dans jQuery 1.6 pour se conformer à la spécification HTML5 du W3C.

Par exemple, étant donné le code HTML suivant :

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>

Tout le code jQuery ci-dessous fonctionnera.

$("div").data("role") === "page";
$("div").data("lastValue") === 43;
$("div").data("hidden") === true;
$("div").data("options").name === "John"; 

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn