W3C-Validierung für ui-select

8

Ich verwende angular-ui-select innerhalb einer Website, wo die formatierten Auswahlfelder mit einer eigenen konfiguriert sind Tag namens ui-select . Das funktioniert gut, aber eine W3C Validierung führt zu diesem Fehler:

  

Element ui-select ist in diesem Kontext nicht als untergeordnetes Element des Elements div zulässig. (Unterdrücken weiterer Fehler aus diesem Teilbaum.)

Hier ist ein Beispielcode:

%Vor%

Ich verstehe, dass <ui-select> nicht erwartet wird, aber wie kann ich damit besser umgehen?

Kann ich es in ein anderes Tag einfügen oder gibt es einen anderen Ansatz für ui-select als HTML-Markup?

    
favo 13.02.2015, 20:52
quelle

3 Antworten

5

Das ist in der Tat ein lang bekanntes Problem mit AngularJS.

Ein paar Dinge, die Sie tun können:

Anstatt das Element <ui-select> zu verwenden, können Sie <div ui-select> verwenden, aber das scheitert immer noch an dem Argument.

Ein Argument mit dem Präfix x- oder data- wird übergeben, aber ich bin nicht sicher, dass ui-select dies unterstützt.

HTML Die W3C-Validierung ist nützlich, aber ich denke, dass sie für HTML-E-Mails am wichtigsten ist, damit sie nicht als Spam gescreent werden. Es ist auch gut für Suchmaschinen, aber wirklich nicht das kritisch.

Wenn Sie sich ' warum validieren ' ansehen, sind die Gründe hauptsächlich für Sauberkeit, einfache Fehlersuche und insgesamt gute Praxis.

Angular (un?) erweitert glücklicherweise den Bereich der Möglichkeiten für HTML5 in einer Weise, die natürlich von den neuesten Spezifikationen für HTML abweicht.

    
MrE 13.02.2015, 22:48
quelle
13

W3C HTML5-Validierer-Betreuer hier. Die kurze Antwort in Bezug auf das Validator-Verhalten ist, dass der Validator Fehler für alle benutzerdefinierten Elemente ausgibt, die Sie in Dokumenten verwenden, und derzeit gibt es keine Möglichkeit, dass Sie als Benutzer damit umgehen können - und das wird fortgesetzt noch etwas länger, bis wir eine Lösung gefunden haben.

Wir haben einige laufende Diskussionen darüber, wie wir das lösen können. Das Ändern des Validators, um jeden Elementnamen mit einem Bindestrich einfach zu ignorieren, ist als vollständige Lösung nicht praktikabel, da wir dann praktisch keine untergeordneten Elemente überprüfen könnten - wir müssten nur den gesamten Teilbaum ignorieren, weil sonst etwas zu anderen Fehlern führen würde. Das ist also eine ideale Lösung.

Wie auch immer, ich würde gerne einen guten Weg finden, das zu lösen. Wenn andere Ideen haben, würde ich sie gerne hören. Zwei gute Orte, um Ideen / Vorschläge zu senden, sind die Mailing-Liste [email protected] Ссылка und die Mailingliste [email protected] Ссылка

Eine Idee, die ich mir selbst ausgedacht habe, ist, dass der Validator alle benutzerdefinierten Elemente genauso behandeln kann, wie er das Element <div> behandelt (soweit es in einem Dokument zulässig ist und welche Kindelemente es sind) darf enthalten). Das ist auch nicht ideal, aber es würde zumindest eine Möglichkeit geben, nach Fehlern in untergeordneten Elementen in der Teilstruktur des benutzerdefinierten Elements zu suchen.

Update 2017-02-06: Der W3C HTML Checker unterstützt jetzt benutzerdefinierte Elemente

Also, Ich habe die Unterstützung für benutzerdefinierte Elemente hinzugefügt für die W3C HTML Checker (Validator) am 2016-12-16 und ein paar Tage später verfeinerte es, um genauer auf verbotene Namen zu prüfen.

Der Trick, den ich in der Checker-Architektur gefunden habe - was im Kern ein RelaxNG Grammatik / Schema-basierter Validator ist - bestand darin, einen Vorverarbeitungsfilter hinzuzufügen, der alle Elemente mit einem Bindestrich enthält Elementname und fügt sie in einen separaten XML-Namespace ein.

Dann habe ich das RelaxNG-Schema aktualisiert, um beliebige Elemente aus diesem XML-Namespace überall zuzulassen. (Das ist ironisch, weil ich XML-Namespaces und all die Probleme, die sie verursachen, ziemlich hasse.)

Wir versuchen nun, etwas Ähnliches für benutzerdefinierte attribute Namen zu tun - wahrscheinlich, indem wir diese als Attributnamen definieren, die einen Bindestrich enthalten (wie benutzerdefinierte Elementnamen).

Der HTML-Prüfer kann jedoch nicht geändert werden, um benutzerdefinierte Attributnamen zuzulassen, bis die HTML-Spezifikation aktualisiert wurde, um sie zuzulassen. Dafür sehen Sie den Vorschlag, der im HTML-spec issue tracker besprochen wird .

    
sideshowbarker 25.02.2015 04:17
quelle
0

Wir haben das gleiche Problem mit benutzerdefinierten Knockout-Komponenten. Ссылка

Ich habe einen Vorschlag hinzugefügt, wie der Validator mit einer kleinen Verbesserung für Benutzer erweitert werden kann, die benutzerdefinierte Elemente verwenden möchten, selbst wenn die Spezifikation noch nicht endgültig ist ( Ссылка ):

Ссылка

    
jfx 08.09.2015 09:09
quelle