#javascript #html
#javascript #HTML
Вопрос:
Вот простой пример группы divs, которые могут быть отсортированы либо по их HTML-содержимому, либо по значениям пользовательских атрибутов:
Сортировка в алфавитном порядке по содержимому HTML
Сортировка от низкого к высокому по значению атрибута «sortweight» HTML:
Я попробовал следующий код и получил ошибку
Ошибка ссылки: $$ не определен
HTML
<div id="sortexample">
<div class="sortitem" sortweight="5">Pears [sortweight: 5]</div>
<div class="sortitem" sortweight="3">Apples [sortweight: 3]</div>
<div class="sortitem" sortweight="1">Cherries [sortweight: 1]</div>
<div class="sortitem" sortweight="4">Oranges [sortweight: 4]</div>
<div class="sortitem" sortweight="2">Strawberries [sortweight: 2]</div>
</div>
JavaScript:
// sort all divs with classname 'sortitem' by html content
function sort_div_content() {
// copy all divs into array and destroy them in the page
divsbucket = new Array();
divslist = $('div.sortitem');
for (a=0;a<divslist.length;a ) {
divsbucket[a] = divslist[a].dispose();
}
// sort array by HTML content of divs
divsbucket.sort(function(a, b) {
if (a.innerHTML.toLowerCase() === b.innerHTML.toLowerCase()) {
return 0;
}
if (a.innerHTML.toLowerCase() > b.innerHTML.toLowerCase()) {
return 1;
} else {
return -1;
}
});
// re-inject sorted divs into page
for (a=0;a<divslist.length;a ) {
divsbucket[a].inject($('sortexample'));
}
}
// sort by attributes - usage for our example: sort_div_attribute('sortweight');
function sort_div_attribute(attname) {
// copy all divs into array and destroy them in the page
divsbucket = new Array();
divslist = $('div.sortitem');
for (a=0;a<divslist.length;a ) {
divsbucket[a] = new Array();
// we'vev passed in the name of the attribute to sort by
divsbucket[a][0] = divslist[a].get(attname);
divsbucket[a][1] = divslist[a].dispose();
}
// sort array by sort attribute content
divsbucket.sort(function(a, b) {
if (a[0].toLowerCase() === b[0].toLowerCase()) {
return 0;
}
if (a[0].toLowerCase() > b[0].toLowerCase()) {
return 1;
} else {
return -1;
}
});
// re-inject sorted divs into page
for (a=0;a<divslist.length;a ) {
divsbucket[a][1].inject($('sortexample'));
}
}
Я не знаю, почему я получил эту ошибку
Комментарии:
1. Нет такого
div
атрибута с именем «sortweight» (попробуйте «data-sortweight»), и вы намеревались использовать функцию jQuery$()
(а не$$()
функцию)?2. В сторону: вы должны объявлять область действия ваших переменных, используя
var
,let
, илиconst
как, например,for(let a=0;
илиconst divbucket = new Array();
.3. @terrymorse Да, но я получил еще одну ошибку ‘Uncaught TypeError: divslist[a].dispose не является функцией в sort_div_content’
4. Я не думаю, что вызывается метод jQuery
.dispose()
. Если вы хотите удалить элемент из DOM, попробуйте использовать .remove() .
Ответ №1:
В пятой строке написано divslist = $$('div.sortitem');
, но $$ не определен. Вы должны использовать $ вместо $ $.
divslist = $('div.sortitem');
Это было бы лучше
Комментарии:
1. Да, но я получил другую ошибку ‘Uncaught TypeError: divslist[a].dispose не является функцией в sort_div_content’
2. Если вы пытаетесь удалить элементы из DOM, вам следует использовать divslist [a].удалить вместо divslist [a].удалить