Ecco una soluzione migliore utilizzando HTML5 data attributes
. Si deve modificare il codice scritto nel file jquery.dropkick-1.0.0.js
come segue (numeri di riga si applicano solo alle v1.0.0
):
// Line 39 -- Add "<img>"
// HTML template for the dropdowns
dropdownTemplate = [
'<div class="dk_container" id="dk_container_{{ id }}" tabindex="{{ tabindex }}">',
'<a class="dk_toggle">',
'<span class="dk_label">{{ label }}<img src="{{ icon }}"/></span>', /* << */
'</a>',
'<div class="dk_options">',
'<ul class="dk_options_inner">',
'</ul>',
'</div>',
'</div>'
].join(''),
// Line 51 -- Add "<img>" (string broken down here for readability)
// HTML template for dropdown options
optionTemplate = '<li class="{{ current }}">' +
'<a data-dk-dropdown-value="{{ value }}">{{ text }}' +
'<img src="{{ icon }}"/></a></li>'; /* << */
Inoltre, aggiungere la seguente riga alle opzioni del plugin
// Line 98 -- add "data.icon"
// Don't do anything if we've already setup dropkick on this element
if (data.id) {
return $select;
} else {
data.settings = settings;
data.tabindex = tabindex;
data.id = id;
data.$original = $original;
data.$select = $select;
data.value = _notBlank($select.val()) || _notBlank($original.attr('value'));
data.label = $original.text();
data.options = $options;
/* Add this attribute */
data.icon = $original.data('icon'); /* << */
}
Prima la seguente riga all'interno la funzione _build
,
// Line 318
if (view.options && view.options.length) {
Aggiungere la seguente riga:
// Line 317. To be placed after other "template = template.replace" statements
template = template.replace('{{ icon }}', view.icon);
Infine, all'interno del ciclo dopo
// Line 321
var // ...
oTemplate = optionTemplate
;
Aggiungere la seguente riga
// To be placed after other "oTemplate = oTemplate.replace" statements
oTemplate = oTemplate.replace('{{ icon }}', view.icon);
Questo potrebbe non essere la migliore pratica di codifica (monkeypatching), come il codice potrebbe rompersi quando la icon
l'attributo dei dati non è impostato.
Vi consiglio di aggiungere del codice per controllare il valore del valore dell'attributo dati icon
e creare due modelli: uno per l'opzione e un altro per il menu a discesa predefinito. Quindi si può selezionare quale modello usare.Lo stesso vale per la funzione _build
, poiché con il monkeypatching dipende dal valore view.icon
(se è definito o meno).
Questa risposta è fantastica. Lei, signore, dovrebbe avere molti più voti. – courtsimas
FYI, dovrai anche aggiornare i metodi reset e _updateFields per non sostituire .dk_label con il testo, ma con l'immagine. – courtsimas