heinetz: Wert in data-Attribut

Hallo Forum,

ich muss per JS den Wert aus einem Attribut data-test ersetzen wie folgt ersetzen:

<a data-test = "value_a">Link</a>

Das Markup soll also am Ende wie folgt aussehen:

<a data-test = "{prop_a:'value_a', prop_b:{prop_b1:'value_b1', prop_b2:'value_b2'}}">Link</a>

Wenn ich das richtig interpretiere, steht in dem Attribut am Ende ein JSON-String oder JSON-Objekt oder ... was genau?

Ich denke, ich werde hier nicht einfach einen String zusammenbauen, der zufällig geschweifte Klammern enthält oder?

besten dank für tipps und liebe gruesse, heinetz

  1. Tach!

    ich muss per JS den Wert aus einem Attribut data-test ersetzen wie folgt ersetzen:

    <a data-test = "value_a">Link</a>
    

    Das Markup soll also am Ende wie folgt aussehen:

    <a data-test = "{prop_a:'value_a', prop_b:{prop_b1:'value_b1', prop_b2:'value_b2'}}">Link</a>
    

    Wenn ich das richtig interpretiere, steht in dem Attribut am Ende ein JSON-String oder JSON-Objekt oder ... was genau?

    Sieht aus wie JSON (ohne Zusatz). JSON ist immer ein String, der ein serialisiertes Javascript-Objekt darstellt (oder seltener auch simple Werte).

    Ich denke, ich werde hier nicht einfach einen String zusammenbauen, der zufällig geschweifte Klammern enthält oder?

    Ja, es gibt bessere Möglichkeiten. Kommt darauf an, was du konkret vorhast. Um ein Objekt zu serialisieren, kannst du unter Javascript JSON.stringify() nehmen.

    dedlfix.

    1. @@dedlfix

      Sieht aus wie JSON

      Nein, ganz und gar nicht.

      JSON sieht so aus:

      {"prop_a":"value_a", "prop_b":{"prop_b1":"value_b1", "prop_b2":"value_b2"}}
      

      Doppelte „Anführungszeichen“, und das auch links vom Doppelpunkt.

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    2. Hello,

      ja, mit JSON.stringify() hatte ich es dann auch gelöst. Allerdings steht in dem Attribut hinterher tatsächlich folgender Wert:

      {"prop_a":"value_a","prop_b":{"prop_b1":"value_b1","prop_b2":"value_b2"}}

      JSON.stringify() generiert offenbar doppelte Anführungszeichen. Ich nehme erstmal an, dass das für die Auswertung des Attributs (Tracking-Code) unerheblich ist. Dennoch stellt sich die Frage, ob ich die Möglichkeit habe, auf die Anführungszeichen Einfluss zu nehmen, ohne den String nachträglich mit regulären Ausdrücken zu behandeln.

      gruss, heinetz

      1. hallo

        JSON.stringify() generiert offenbar doppelte Anführungszeichen. Ich nehme erstmal an, dass das für die Auswertung des Attributs (Tracking-Code) unerheblich ist.

        Du solltest aber nicht annehmen, sondern die API konsultieren.

        --
        Neu im Forum! Signaturen kann man ausblenden!
      2. Hallo heinetz,

        JSON.stringify() generiert offenbar doppelte Anführungszeichen.

        Implementation detail. Könnten auch single quotes sein.

        Dennoch stellt sich die Frage, ob ich die Möglichkeit habe, auf die Anführungszeichen Einfluss zu nehmen,

        Nicht soweit mir bekannt. Aber schau dir die API an.

        ohne den String nachträglich mit regulären Ausdrücken zu behandeln.

        Don't… du müsstest auch diverse Fälle mit Escaping abdecken, etwa "\"" u.ä. - du begibst dich da auf einen Pfad, der dir Probleme bereiten wird.

        LG,
        CK

        1. @@Christian Kruse

          JSON.stringify() generiert offenbar doppelte Anführungszeichen.

          Implementation detail. Könnten auch single quotes sein.

          Nein, auf gar keinen Fall. JSON verlangt doppelte „Anführungszeichen“. Das sagte ich doch bereits.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
          1. Hallo Gunnar,

            was möchtest du mir sagen? 😉

            LG,
            CK

            1. @@Christian Kruse

              was möchtest du mir sagen? 😉

              Dass ich meinen Finger auf dem falschen Button hatte. 😉

              Jetzt editiert.

              LLAP 🖖

              --
              „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      3. Hello,

        JSON.stringify() generiert offenbar doppelte Anführungszeichen. Ich nehme erstmal an, dass das für die Auswertung des Attributs (Tracking-Code) unerheblich ist. Dennoch stellt sich die Frage, ob ich die Möglichkeit habe, auf die Anführungszeichen Einfluss zu nehmen, ohne den String nachträglich mit regulären Ausdrücken zu behandeln.

        Gar nichts wirst Du an dem String tun. Wenn der Serializer so arbeitet, dann ist das so. Und wenn der String einen anderen Inhalt transportieren soll, dann wird die Datenstruktur bearbeitet und der String neu erzeugt.

        Das ist das Prinzip und das funktioniert nur, solange sich alle daran halten.

        MfG

  2. Lieber heinetz,

    <a data-test = "value_a">Link</a>
    

    Du willst keine Leerzeichen um das Istgleichzeichen!!

    <a data-test="value_a">Link</a>
    

    Was Deinen Ersatzcode angeht, so sieht er aus wie ein übliches Objekt-Literal in JavaScript:

    {prop_a:'value_a', prop_b:{prop_b1:'value_b1', prop_b2:'value_b2'}}
    

    Anders formatiert sieht es so aus:

    {
        prop_a: 'value_a',
        prop_b:{
            prop_b1: 'value_b1',
            prop_b2: 'value_b2'
        }
    }
    

    Um ein solches Objektliteral "einfach" mit JavaScript zu notieren, nützt Dir (wie schon von @dedlfix angemerkt) JSON.stringify().

    var o = {prop_a:'value_a', prop_b:{prop_b1:'value_b1', prop_b2:'value_b2'}};
    var element = document.querySelector('[data-test="value_a"]');
    
    // fill data-test attribute
    element.dataset.test = JSON.stringify(o);
    

    Liebe Grüße,

    Felix Riesterer.

    1. Hi,

      <a data-test = "value_a">Link</a>
      

      Du willst keine Leerzeichen um das Istgleichzeichen!!

      Doch, offensichtlich will er die, sonst hätte er sie nicht hingemacht.

      Was stört Dich denn daran? Erlaubt sind sie …

      cu,
      Andreas a/k/a MudGuard

      1. @@MudGuard

        Du willst keine Leerzeichen um das Istgleichzeichen!!

        Doch, offensichtlich will er die, sonst hätte er sie nicht hingemacht.

        Was stört Dich denn daran? Erlaubt sind sie …

        Erlaubt ist, was gefällt.

               <a
            data-test
                = 
            "value_a"
                >
               Link
               </a>
        

        (frei nach Christian Morgenstern)

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  3. hi,

    Ich denke, ich werde hier nicht einfach einen String zusammenbauen, der zufällig geschweifte Klammern enthält oder?

    Würde ich auch nicht machen. Es sei denn der Zufall ist da erwünscht. MfG