Fügen Sie einen Inline-Stil mit Javascript hinzu

87

Ich versuche, diesen Code einem dynamisch erstellten div-Element hinzuzufügen

style = "width:330px;float:left;" 

Der Code, in dem die Dynamik erstellt wird, divlautet

var nFilter = document.createElement('div');
nFilter.className = 'well';
nFilter.innerHTML = '<label>' + sSearchStr + '</label>';

Meine Idee ist es, den Stil danach hinzuzufügen, < div class="well"aber ich weiß nicht, wie ich es machen würde.

Curtis Crewe
quelle
1
Welchen Unterschied macht es? Der Inline-Stil hat immer die höchste Spezifität.
Amberlamps
Da das Div dynamisch erstellt wird, kann ich kein statisches verwenden, da es ein vollständiges Javascript-Bibliotheksskript ist
Curtis Crewe
Vielleicht ist das ein XY-Problem. Was versuchst du zu erreichen? Ist nFilter.style.width = '330px'; nFilter.style.float = 'left';was du suchst?
Amberlamps

Antworten:

120
nFilter.style.width = '330px';
nFilter.style.float = 'left';

Dies sollte dem Element einen Inline-Stil hinzufügen.

Dharman
quelle
36

Sie können es direkt auf dem Stil tun:

var nFilter = document.createElement('div');
nFilter.className = 'well';
nFilter.innerHTML = '<label>'+sSearchStr+'</label>';

// Css styling
nFilter.style.width = "330px";
nFilter.style.float = "left";

// or
nFilter.setAttribute("style", "width:330px;float:left;");
Mario Sannum
quelle
6
Nicht das CSS-Styling, sondern die dritte Option mit setAttribute hat für mich perfekt funktioniert.
Milkersarac
15

Verwenden von jQuery:

$(nFilter).attr("style","whatever");

Andernfalls :

nFilter.setAttribute("style", "whatever");

sollte arbeiten

Jean-Georges
quelle
5
Es ist nicht notwendig, JQuery in diesem Fall zu verwenden
Dharman
9
Er gibt eine alternative Lösung ohne JQuery. Ich sehe keine Notwendigkeit für eine Ablehnung.
Termato
Die richtige, angeforderte Vanilla JS-Lösung ist die alternative Lösung? Nicht die, nach der niemand gefragt hat, betrifft eine Bibliothek, die niemand erwähnt hat?
Silvio Langereis
12

Sie können es damit versuchen

nFilter.style.cssText = 'width:330px;float:left;';

Das sollte es für dich tun.

Hector Romero
quelle
9
var div = document.createElement('div');
div.setAttribute('style', 'width:330px; float:left');
div.setAttribute('class', 'well');
var label = document.createElement('label');
label.innerHTML = 'YOUR TEXT HERE';
div.appendChild(label);
James Kyburz
quelle
6

Einige Leute haben ein Beispiel mit setAttribute, das mir gefällt. Es wird jedoch davon ausgegangen, dass derzeit keine Stile festgelegt sind. Ich würde vielleicht so etwas machen wie:

nFilter.setAttribute('style', nFilter.getAttribute('style') + ';width:330px;float:left;');

Oder machen Sie es zu einer Hilfsfunktion wie dieser:

function setStyle(el, css){
  el.setAttribute('style', el.getAttribute('style') + ';' + css);
}

setStyle(nFilter, 'width:330px;float:left;');

Dadurch wird sichergestellt, dass Sie kontinuierlich Stile hinzufügen können, und es werden keine derzeit festgelegten Stile entfernt, indem immer an die aktuellen Stile angehängt wird. Außerdem wird ein zusätzliches Semikolon hinzugefügt, sodass bei einem fehlenden Stil ein anderer angehängt wird, um sicherzustellen, dass er vollständig abgegrenzt ist.

stuyam
quelle
2

Sie sollten eine CSS-Klasse erstellen und .my_styledann verwenden.addClass('.mystyle')

bennett_an
quelle
2

Wenn Sie nicht jede CSS-Eigenschaft zeilenweise hinzufügen möchten, können Sie Folgendes tun:

document.body.insertAdjacentHTML('afterbegin','<div id="div"></div>');

/**
 * Add styles to DOM element
 * @element DOM element
 * @styles object with css styles
 */
function addStyles(element,styles){
  for(id in styles){
    element.style[id] = styles[id];
  }
}

// usage
var nFilter = document.getElementById('div');
var styles = {
  color: "red"
  ,width: "100px"
  ,height: "100px"
  ,display: "block"
  ,border: "1px solid blue"
}
addStyles(nFilter,styles);

Vincurekf
quelle
0

Verwenden Sie cssText

nFilter.style.cssText +=';width:330px;float:left;';
marbor3
quelle
0

Versuchen Sie so etwas

document.getElementById("vid-holder").style.width=300 + "px";
Zubair Mushtaq
quelle
-1

Machen Sie es jetzt mit CSS, nachdem Sie die Klasse erstellt haben. .well {width: 330px; float: left; }}

Seth K.
quelle