CreateElement avec id?

288

J'essaie de modifier ce code pour donner également à cet élément div un ID, mais je n'ai rien trouvé sur google et idName ne fonctionne pas. J'ai lu quelque chose sur append , mais cela semble assez compliqué pour une tâche qui semble assez simple, alors y a-t-il une alternative? Merci :)

g=document.createElement('div'); g.className='tclose'; g.v=0;
pufAmuf
la source
4
Ou tu veux dire g.id = 'foo';?
Šime Vidas
1
Je sais maintenant que je voulais dire l'échelle :)
pufAmuf
3
Cette recherche Google renvoie des résultats raisonnables.
Felix Kling

Réponses:

522

Vous devez utiliser la .setAttribute()méthode:

g = document.createElement('div');
g.setAttribute("id", "Div1");
lkaradashkov
la source
4
Avec ce code, nous créons non seulement l'ID d'élément mais aussi pour tous les attributs de l'élément.
Mai
3
@Mai Pouvez-vous expliquer davantage? Je ne comprends pas la phrase.
mystrdat
15
@mystrdat Je pense que Mai essaie de dire que setAttribute () peut être utilisé pour créer les autres attributs d'un élément et pas seulement l'id.
Chuck L
94

Vous pouvez utiliser à g.id = 'desiredId'partir de votre exemple pour définir l'id de l'élément que vous avez créé.

gddc
la source
Je pense toujours que l'annwer avec moins de code est le meilleur. Plus de prise de vue n'est pas possible. THX.
m3nda
57
var g = document.createElement('div');
g.id = 'someId';
raina77ow
la source
34

Vous pouvez utiliser Element.setAttribute

Exemples:

g.setAttribute("id","yourId")

g.setAttribute("class","tclose")


Voici ma fonction pour mieux faire cela:

function createElement(element, attribute, inner) {
  if (typeof(element) === "undefined") {
    return false;
  }
  if (typeof(inner) === "undefined") {
    inner = "";
  }
  var el = document.createElement(element);
  if (typeof(attribute) === 'object') {
    for (var key in attribute) {
      el.setAttribute(key, attribute[key]);
    }
  }
  if (!Array.isArray(inner)) {
    inner = [inner];
  }
  for (var k = 0; k < inner.length; k++) {
    if (inner[k].tagName) {
      el.appendChild(inner[k]);
    } else {
      el.appendChild(document.createTextNode(inner[k]));
    }
  }
  return el;
}

Exemple 1:

createElement("div");

retournera ceci:

<div></div>

Exemple 2:

createElement("a",{"href":"http://google.com","style":"color:#FFF;background:#333;"},"google");`

retournera ceci:

<a href="http://google.com" style="color:#FFF;background:#333;">google</a>

Exemple 3:

var google = createElement("a",{"href":"http://google.com"},"google"),
    youtube = createElement("a",{"href":"http://youtube.com"},"youtube"),
    facebook = createElement("a",{"href":"http://facebook.com"},"facebook"),
    links_conteiner = createElement("div",{"id":"links"},[google,youtube,facebook]);

retournera ceci:

<div id="links">
    <a href="http://google.com">google</a>
    <a href="http://youtube.com">youtube</a>
    <a href="http://facebook.com">facebook</a>
</div>

Vous pouvez créer de nouveaux éléments et définir des attributs et ajouter des enfants

createElement("tag",{attr:val,attr:val},[element1,"some text",element2,element3,"or some text again :)"]);

Il n'y a pas de limite pour les éléments attr ou enfant

Guja1501
la source
7
Pourquoi diable transmettriez-vous les attributs avec votre propre syntaxe [que vous devez analyser], alors que vous pouvez utiliser un objet standard? De plus, si vous avez besoin de créer beaucoup d'éléments, vous avez besoin d'un système de modèles [par exemple, des guidons] et non de fonctions trop compliquées.
moonwave99
3
Cette fonction est l'une des premières de mes fonctions et je n'ai pas pensé à la mettre à jour. Je pense que votre idée est meilleure et je vais certainement la changer. Merci pour ça.
Guja1501
7
Bien qu'ils aient raison, merci d'avoir fourni des informations supplémentaires et d'autres façons de procéder. Très perspicace.
Fata1Err0r
15

Pourquoi ne pas le faire avec jQuery?

var newDiv= $('<div/>', { id: 'foo', class: 'tclose'})
Shyju
la source
7
tout le monde ne peut pas ou ne veut pas utiliser jQuery. Mais s'il l'était, il pourrait simplement faire var g = $ ('<div id = "blah" class = "tclose">');
Bradley Mountford
24
@BradleyMountford: Il a tagué la question avec jQuery. thay j'ai suggéré une solution jQuery
Shyju
2
Bien que la spécification n'interdise pas l'utilisation de mots clés réservés comme noms de propriété, il peut être préférable de mettre des classguillemets.
Felix Kling
5
var element = document.createElement('tagname');    

element.className= "classname";
element.id= "id";

essayez ceci que vous voulez.

Lol Super
la source
4

Je ne sais pas si vous essayez de définir un ID pour pouvoir le styler en CSS, mais si c'est le cas, vous pouvez également essayer:

var g = document.createElement('div');    

g.className= "g";

et cela nommera votre div afin que vous puissiez le cibler.

JLee365
la source