2017-02-15 4 views
2

Also habe ich eine Liste von Attributen als String-Variable gespeichert. Ich möchte diese Variable zu einem <div> hinzufügen. Ich bin momentan ratlos. Was ich habe, ist wie folgt:Attribute als String zum DOM-Element in jQuery hinzufügen

HTML:

<div></div>

JS:

var attributes = 'data-id="123" data-type="content" data-order="1"'

gewünschte Ausgabe:

<div data-id="123" data-type="content" data-order="1"></div>

+1

Da Ihre Attribute als String gespeichert werden, müssen Sie zunächst Ihre Datenattribute und ihre Werte extrahieren, diese durchlaufen und dann zu Ihrem div hinzufügen, was Sie mit der '.data()' -Methode von jQuery tun können. – WillardSolutions

Antwort

1
var attributes = 'data-id="123" data-type="content" data-order="1"'; 
attributes=attributes.split(" "); 
i=0; 
var d=document.getElementsByTagName('div')[0]; 
while (i<attributes.length){ 
d.setAttribute(attributes[i].split('=')[0],attributes[i].split('=')[1].replace(/\"/g,"")); 
i++; 
} 

alert(d.getAttribute("data-id")); 
1

Dies sollte Arbeit.

var div = document.getElementById('YOUR_ID'); 
var attributes = 'data-id="123" data-type="content" data-order="1"' 
attributes.split(' ').forEach((attr) => { 
    div.setAttribute(attr.split('=')[0], attr.split('=')[1]); 
}); 
+0

Sie müssten jedoch die doppelten Anführungszeichen in den Datenwerten loswerden. – NotABlueWhale

+1

Dies wird unterbrochen, wenn in einem Attributwert ein Leerzeichen enthalten ist. –

+1

Dies funktionierte auch für meine Verwendung, Danke für Ihren Beitrag. Die anderen waren nur ein bisschen kugelsicherer. – DigitalMC

1

können Sie split() verwenden Attribute auf Schlüssel-Wert zu spalten und dann forEach() Schleife verwenden, um sie zu Element hinzuzufügen.

var attributes = 'data-id="123" data-type="content" data-order="1"'.replace(/"/g, '').split(/=| /) 
 
attributes.forEach(function(e, i) { 
 
    if(i % 2 == 0) $('div').attr(attributes[i], attributes[i + 1]) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>DIv</div>

+0

Was ist der Sinn von 'if (i% 2 == 0)' in dieser Lösung? – DigitalMC

+0

An jeder geraden Zahl etwas tun. –

+0

Richtig, aber warum nur gerade Zahlen? – DigitalMC

2

spaltete die attributes Zeichenfolge durch Leerzeichen (aber keine Leerzeichen innerhalb der Anführungszeichen)

var div = document.getElementById('test'); 
 
var attributes = 'data-id="123" data-type="content new" data-order="1"'; 
 
var arr = attributes.match(/[^\s="']+|"([^"]*)"|'([^']*)'/g); 
 

 
for (var i = 0; i < arr.length; i += 2) 
 
    div.setAttribute(arr[i], arr[i + 1].replace(/"/g, ''));
<div id="test">test</div>