Hier ist eine bessere Lösung mit HTML5 data attributes
. Man muss den Code ändern, in der jquery.dropkick-1.0.0.js
Datei geschrieben wie folgt (Zeilennummern gelten nur für 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>'; /* << */
Des Weiteren die folgende Zeile in der
// 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'); /* << */
}
Bevor Sie die folgenden Zeilenoptionen des Plug-Ins hinzufügen, innerhalb die _build
Funktion,
// Line 318
if (view.options && view.options.length) {
Fügen Sie die folgende Zeile ein:
// Line 317. To be placed after other "template = template.replace" statements
template = template.replace('{{ icon }}', view.icon);
schließlich innerhalb der Schleife nach
// Line 321
var // ...
oTemplate = optionTemplate
;
Fügen Sie folgende Zeile
// To be placed after other "oTemplate = oTemplate.replace" statements
oTemplate = oTemplate.replace('{{ icon }}', view.icon);
dies nicht die beste Codierung der Praxis (monkeypatching) sein könnte, da der Code brechen kann, wenn die icon
Datenattribut ist nicht festgelegt.
Ich empfehle Ihnen, einen Code hinzuzufügen, um den Wert des icon
Datenattributwerts zu überprüfen und zwei Vorlagen zu erstellen: eine für die Option und eine weitere für das Standard-Dropdown. Dann kann man auswählen, welche Vorlage zu verwenden ist.Dasselbe gilt für die _build
-Funktion, da bei der Monkey-Anpassung der Wert view.icon
(falls definiert oder nicht) abhängt.
Diese Antwort ist fantastisch. Sie, Herr, sollten viele weitere Upvotes haben. – courtsimas
FYI, Sie müssen auch die Reset-Methode und die _updateFields-Methode aktualisieren, um .dk_label nicht durch Text, sondern durch das Bild zu ersetzen. – courtsimas