Puis-je ajouter un attribut personnalisé à une balise HTML comme suit?
<tag myAttri="myVal" />
Vous pouvez modifier votre déclaration! DOCTYPE (c'est-à-dire une DTD) pour l'autoriser, de sorte que le document [XML] soit toujours valide:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[
<!ATTLIST tag myAttri CDATA #IMPLIED>
]>
#IMPLIED
signifie que c'est un attribut facultatif, ou vous pouvez utiliser #REQUIRED
, etc.
Plus d'informations sont dans DTD - Attributes.
Vous pouvez ajouter des attributs personnalisés à vos éléments à volonté. Mais cela rendra votre document invalide.
En HTML 5, vous aurez la possibilité d'utiliser attributs de données personnalisés précédés du préfixe data-
.
Non, cela va casser la validation.
En HTML 5, vous pouvez/pourrez ajouter des attributs personnalisés. Quelque chose comme ça:
<tag data-myAttri="myVal" />
La fonction jQuery data()
vous permet d'associer des données arbitraires à des éléments DOM. Voici un exemple .
En HTML5: oui: utilisez le attribut de données .
<ul>
<li data-animal-type="bird">Owl</li>
<li data-animal-type="fish">Salmon</li>
<li data-animal-type="spider">Tarantula</li>
</ul>
Oui, vous pouvez, vous l'avez fait dans la question elle-même: <html myAttri="myVal"/>
.
Vous pouvez définir des propriétés à partir de JavaScript.
document.getElementById("foo").myAttri = "myVal"
var demo = document.getElementById("demo")
console.log(demo.dataset.myvar)
// or
alert(demo.dataset.myvar)
//this will show in console the value of myvar
<div id="demo" data-myvar="foo">anything</div>
Oui, vous pouvez le faire!
Avoir la prochaine balise HTML
:
<tag key="value"/>
Nous pouvons accéder à leurs attributs avec JavaScript
:
element.getAttribute('key'); // Getter
element.setAttribute('key', 'value'); // Setter
Element.setAttribute()
place l'attribut dans la balise HTML
s'il n'existe pas. Donc, vous n'avez pas besoin de le déclarer dans le code HTML
si vous voulez le définir avec JavaScript
.
key
: il peut s'agir du nom de votre choix pour l'attribut, alors qu'il n'est pas déjà utilisé pour la balise actuelle. value
: c'est toujours une chaîne contenant ce dont vous avez besoin.
Voici l'exemple:
document.getElementsByTagName("html").foo="bar"
Voici un autre exemple pour définir des attributs personnalisés dans un élément de balise body:
document.getElementsByTagName('body')[0].dataset.attr1 = "foo";
document.getElementsByTagName('body')[0].dataset.attr2 = "bar";
Puis lisez l'attribut par:
attr1 = document.getElementsByTagName('body')[0].dataset.attr1
attr2 = document.getElementsByTagName('body')[0].dataset.attr2
Vous pouvez tester le code ci-dessus dans la console de DevTools, par exemple.
utiliser des données-tout, je les utilise beaucoup
<aside data-area="asidetop" data-type="responsive" class="top">
Vous pouvez ajouter, mais vous devez ensuite écrire une ligne de code JavaScript aussi,
document.createElement('tag');
pour s'assurer que tout tombe en place. Je veux dire Internet Explorer :)
Une autre approche, propre et qui maintiendra le document valide, consiste à concaténer les données souhaitées dans une autre balise, par exemple. id, puis utilisez split pour prendre ce que vous voulez quand vous le voulez.
<html>
<script>
function demonstrate(){
var x = document.getElementById("example data").querySelectorAll("input");
console.log(x);
for(i=0;i<x.length;i++){
var line_to_illustrate = x[i].id + ":" + document.getElementById ( x[i].id ).value;
//concatenated values
console.log("this is all together: " + line_to_illustrate);
//split values
var split_line_to_illustrate = line_to_illustrate.split(":");
for(j=0;j<split_line_to_illustrate.length;j++){
console.log("item " + j+ " is: " + split_line_to_illustrate[j]);
}
}
}
</script>
<body>
<div id="example data">
<!-- consider the id values representing a 'from-to' relationship -->
<input id="1:2" type="number" name="quantity" min="0" max="9" value="2">
<input id="1:4" type="number" name="quantity" min="0" max="9" value="1">
<input id="3:6" type="number" name="quantity" min="0" max="9" value="5">
</div>
<input type="button" name="" id="?" value="show me" onclick="demonstrate()"/>
</body>
</html>