Kann ich einem HTML-Tag ein benutzerdefiniertes Attribut wie das folgende hinzufügen?
<tag myAttri="myVal" />
Kann ich einem HTML-Tag ein benutzerdefiniertes Attribut wie das folgende hinzufügen?
<tag myAttri="myVal" />
Antworten:
Sie können Ihre! DOCTYPE-Deklaration (dh DTD) so ändern, dass das [XML] -Dokument weiterhin gültig ist:
<!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
bedeutet, dass es sich um ein optionales Attribut handelt oder dass Sie es verwenden #REQUIRED
können usw.
Weitere Informationen finden Sie in DTD - Attribute .
<meta http-equiv="content-type" content="application/xhtml+xml" />
.
data-
.
Sie können Ihren Elementen nach Belieben benutzerdefinierte Attribute hinzufügen. Dadurch wird Ihr Dokument jedoch ungültig.
In HTML 5 haben Sie die Möglichkeit, benutzerdefinierte Datenattributedata-
zu verwenden , denen ein Präfix vorangestellt ist .
|
in einem CSS nicht erlaubt ist href
, aber das ist, was für Google Fonts
Nein, dies wird die Validierung unterbrechen.
In HTML 5 können / werden Sie benutzerdefinierte Attribute hinzufügen können. Etwas wie das:
<tag data-myAttri="myVal" />
Mit der jQuery- data()
Funktion können Sie DOM-Elementen beliebige Daten zuordnen. Hier ist ein Beispiel .
In HTML5: Ja: Verwenden Sie das Datenattribut .
<ul>
<li data-animal-type="bird">Owl</li>
<li data-animal-type="fish">Salmon</li>
<li data-animal-type="spider">Tarantula</li>
</ul>
Ja, Sie können, Sie haben es in der Frage selbst getan : <html 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>
Ja, du kannst es schaffen!
Das nächste HTML
Tag haben:
<tag key="value"/>
Wir können auf ihre Attribute zugreifen mit JavaScript
:
element.getAttribute('key'); // Getter
element.setAttribute('key', 'value'); // Setter
Element.setAttribute()
Fügen Sie das Attribut in das HTML
Tag ein, falls es nicht vorhanden ist. Sie müssen es also nicht im HTML
Code deklarieren, wenn Sie es mit festlegen möchtenJavaScript
.
key
: kann ein beliebiger Name sein, den Sie für das Attribut wünschen, der jedoch noch nicht für das aktuelle Tag verwendet wird.
value
: Es ist immer eine Zeichenfolge, die enthält, was Sie benötigen.
Hier ist das Beispiel:
document.getElementsByTagName("html").foo="bar"
Hier ist ein weiteres Beispiel zum Festlegen benutzerdefinierter Attribute für das Body-Tag-Element:
document.getElementsByTagName('body')[0].dataset.attr1 = "foo";
document.getElementsByTagName('body')[0].dataset.attr2 = "bar";
Lesen Sie dann das Attribut durch:
attr1 = document.getElementsByTagName('body')[0].dataset.attr1
attr2 = document.getElementsByTagName('body')[0].dataset.attr2
Sie können den obigen Code in der Konsole in DevTools testen, z
benutze Daten - beliebig, ich benutze sie oft
<aside data-area="asidetop" data-type="responsive" class="top">
data-*
Werte aus JavaScript?
Ein anderer Ansatz, der sauber ist und das Dokument gültig hält, besteht darin, die gewünschten Daten in ein anderes Tag, z. B. eine ID, zu verketten und dann mit split das zu übernehmen, was Sie möchten, wann Sie es möchten.
<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>
Sie können hinzufügen, aber dann müssen Sie auch eine Zeile JavaScript-Code schreiben,
document.createElement('tag');
um sicherzustellen, dass alles passt. Ich meine Internet Explorer :)
<tag ...>
hier bedeutet anscheinend nur ein beliebiges HTML-Tag.
Gut! Sie können tatsächlich eine Reihe von benutzerdefinierten HTML-Attributen erstellen, indem Sie die Datenattribute so verkleiden, wie Sie es tatsächlich möchten.
z.B.
[attribute='value']{
color:red;
}
<span attribute="value" >hello world</span>
Es funktioniert anscheinend, aber das würde Ihr Dokument ungültig machen. Sie müssen JScript nicht verwenden, um benutzerdefinierte Attribute oder sogar Elemente zu haben, es sei denn, Sie müssen Ihre neuen formulierten (benutzerdefinierten) Attribute genauso behandeln, wie Sie Ihre behandeln Attribut "Daten"
Denken Sie daran, "ungültig" bedeutet nichts. Das Dokument wird jederzeit einwandfrei geladen. und einige Browser würden Ihr Dokument tatsächlich nur durch das Vorhandensein von DOCTYPE validieren ..... Sie wissen tatsächlich, was ich meine.
Sie können so etwas tun, um den gewünschten Wert aus JavaScript anstelle eines Attributs zu extrahieren:
<a href='#' class='click'>
<span style='display:none;'>value for JavaScript</span>some text
</a>
<input type="hidden" value="...">
. Berücksichtigen Sie jedoch den Unterschied zwischen dem Datentyp, den Sie in verschiedene Attribute eingeben, und den Daten, die Sie möglicherweise in ein verstecktes Feld eingeben. Ein <span>
(ausgerechnet) in einem <a>
zu verstecken, um ein Stück Metadaten zu pflegen, ist kein guter Schachzug. Es wäre eigenartig für Ihre Site und sehr stark von JS abhängig (anmutige Erniedrigung, Menschen).