IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Syntaxe with end with


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Syntaxe with end with
    Bonjour a tous
    je voudrais simplifier mes codes

    au lieu de faire document.getElementById("truc").machin=bidule
    et de répéter pour chaque modif d'une propriété

    y a t il un moyen de faire un peu comme on le fait en VB pour manipuler le DOM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with document.getElementById("truc").style
    .border="1px solid red";
    .backgroundColor="blue";
    //etc....
    end with
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre chevronné
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    La solution ci-dessous, peut-être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $=function(id) { return document.getElementById(id); };

  3. #3
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    jour

    la syntaxe est presque bonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with (document.getElementById("truc").style){
       border="1px solid red";
       backgroundColor="blue";
    }
    par contre il est déconseillé d'utilisé with pour une histoire de performance ou sécurité je sais plus trop mais sa reste a voir

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = document.getElementById("truc").style
    s.border="1px solid red";
    s.backgroundColor="blue";

    Sinon le principe des sélecteurs Jquery...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Regarde cette page.
    http://javascript.info/tutorial/with-operator
    Il y a bien un with mais c'est déconseillé de l'utiliser dans la mesure où il n'y a pas de contrôle et que tu pourrais affecter une valeur à une propriété qui n'existe pas pour l'objet sans qu'il y ait d'erreur.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    OK merci messieux
    spacefrog
    oui une variable ça je sais faire encore ça va, pas trop dur

    comme j'ai beaucoup de ligne finalement a répétition je voulais juste savoir si cela existait

    badaze de conseillé oui mais dans mon cas les fonctions sont déclenchées si les attributs sont != null donc je n'ai pas de soucis avec ca non??

    surtout que maintenant je sais me servir du débogueur IE (F12) même si il est lite ça m'a permis de comprendre beaucoup de chose avec mes attribut
    actuellement en débogage je n'ai plus d'erreurs tout est bien défini
    dans ce cas tu vois une objection autre qu'une probable gestion d'erreur qui pourrait m’empêcher de l'utiliser ???
    par ce que ca simplifierait les code et en plus je serais moins perdus dans la syntaxe moi le vieux VBISTE
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Sur le site de Mozilla ils disent que cette fonction peut être retirée du jour au lendemain.

    De plus comme ils le disent ça doit être coton à déboguer.

    Quand tu utilises with l'objet référencé devient l'objet de base et toutes ses propriétés deviennent des défauts.

    Dans le code ci-dessous, quand je change Href c'est le Href de toto qui est changé. Si tu regardes bien il y a une variable nommée title qui passe de toto à titi.
    Mais tu verras que alert(title) donne toto et non pas titi mais si tu laisses le curseur sur le lien tu verras titi.

    Donc le with tel qu'il est implémenté est une fausse bonne idée et donc à proscrire sauf si les effets de bords et les bugs incompréhensibles sont ta tasse de thé.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!DOCTYPE html>
    <html>
    <head>
    <script>
    function test() {
     var title = 'toto';
     with(document.getElementById('toto')) {
      title = 'titi';
      href  = "http://www.emmella.fr";
     }
     alert(document.getElementById('toto').href);
     alert(title);
    }
    </script>
    </head>
    <body>
     <a href="http://www.developper.com" id="toto">Développer.com</a>
     <br>
     <input type="button" value="Test" onclick="test()" />
    </body>
    </html>

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    Bonjour,
    dans ce cas tu vois une objection autre qu'une probable gestion d'erreur qui pourrait m’empêcher de l'utiliser ???
    par ce que ca simplifierait les code et en plus je serais moins perdus dans la syntaxe moi le vieux VBISTE
    j'en vois une évidente dans ton cas qui est ta façon d'indenter ton code et par conséquence la maintenance et

    Trêve de plaisanterie, si le with est bien maitrisé il ne devrait pas y avoir de soucis (oui c'est au conditionnel car loi de Murphy ...) mais il est tout aussi simple d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var oElem = document.querySelector('#id-element');
    var oStyle = oElem.style;
      oStyle.backgroundColor = '#ABC';
      oStyle.border = '#1px solid 069';
    c'est tout aussi clair mais surement moins piégeux même si plus (à peine) verbeux !

  9. #9
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 099
    Par défaut
    Un autre problème de with c’est la performance. Le moteur doit déterminer si un identifiant utilisé fait partie de l’objet du with, ou bien du contexte supérieur. Autrement dit, on rajoute un scope, mais un scope basé sur un objet dynamique, contrairement à une fonction ou un bloc let qui peuvent faire l’objet d’optimisations avant exécution.

    Et aussi, un objet DOM ayant typiquement un grand nombre de propriétés, ça rajoute beaucoup de choses dans le scope. Les choses commencent à sérieusement se gâter si tu décides d’utiliser des variables qui ne font normalement pas partie de l’objet. Il peut se produire deux choses :
    • soit il se trouve que la variable est en fait une propriété de l’objet et tu n’avais pas prévu ça, et là il peut se passer n’importe quoi ;
    • soit la variable ne se trouve pas sur l’objet, et le moteur va d’abord vérifier chacune des propriétés de l’objet avant de passer au contexte supérieur. Dans le cas d’un objet DOM, comme je l’ai dit, il y a beaucoup de propriétés donc ça peut être très lent.


    Voir optimization killers. with est considéré likely never optimizable (probablement jamais optimisable) au même titre qu’eval. Cet article concerne V8, le moteur de Chrome et d’Opera, mais ça donne une idée.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilité de With/End With ?
    Par OtObOx dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/02/2011, 01h30
  2. Gerer les propriété d'un TextBox (With, end With)
    Par geeksideofme dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2007, 17h57
  3. [VBA-E] Limitation des With...End With
    Par bernard38 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/10/2006, 15h59
  4. [VB.NET] With...End With et performances ?
    Par Dnx dans le forum Windows Forms
    Réponses: 9
    Dernier message: 06/04/2005, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo