jQuery: emulare gli attributi di dati HTML5 in XML

jQuery non è concepito per funzionare al meglio con documenti XML. In particolare gli attributi di dati HTML5 potrebbero essere resi compatibili con XML a patto di sfruttare le caratteristiche di questo standard.

Possiamo utilizzare i namespace per il nostro scopo


<?xml version="1.0" encoding="utf-8" ?>
<document xmlns="http://www.w3.org/1999/xhtml" xmlns:data="http://site.com/ns/data">
	<ul>
		<li>Test</li>
		<li>Test</li>
		<li><data:action type="click" message="Test">Test</data:action></li>
	</ul>
	<!-- JavaScript qui -->
</document>

Il namespace XHTML è stato inserito al solo scopo di permettere ai browser di riconoscere gli elementi standard HTML/XHTML. La sola eccezione riguarda il nostro elemento data che appartiene al namespace data. Tale elemento ha gli attributi type e message che verranno usati da jQuery per associare un evento all'elemento:


(function($) {
	$.xmldata = function(element, options) {
		options = $.extend({
			callback: function() {}
			
		},
		options);

		
		var message = element.getAttribute('message');
		var type = element.getAttribute('type');
		element.addEventListener(type, function() {
			options.callback(message);
			
		}, false);
			

		
	};
	
})(jQuery);

Il DOM XML è diverso da quello HTML: l'elemento data:action è costituito dal prefisso del namespace (data) e dal nome locale dell'elemento (action):


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="xmldata.js"></script>
<script type="text/javascript">
	<![CDATA[
	document.addEventListener('DOMContentLoaded', 
function() {
	
	var list = document.getElementsByTagName('ul')[0];
	var action = list.getElementsByTagNameNS('http://site.com/ns/data', 'action')[0];


	$.xmldata(action, {
		callback: function(msg) {
			alert(msg);

			
		}
		
	});

	
});
	]]>
</script>

Come si può notare, utilizzando i namespace possiamo aggiungere la stessa funzionalità anche a documenti XML.

Torna su