Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Почему метод .html() не работает так как .innerHTML()? (https://javascript.ru/forum/events/75135-pochemu-metod-html-ne-rabotaet-tak-kak-innerhtml.html)

Dilettante_Pro 05.09.2018 13:17

Цитата:

Сообщение от drakulawz
Метод html записывает в массив параграфов тот же параграф но с добавлением нумерации

В примере пост 3 не так.
Метод .html() применяется к объекту jQuery, полученному по конкретному элементу DOM
num - объект jQuery со всеми элементами ".p"
num[i] - конкретный элемент DOM
$(num[i]) - объект jQuery конкретного элемента DOM

laimas 05.09.2018 13:28

Цитата:

Сообщение от drakulawz
не совсем понимаю значение слова гибрид в js

Это не термин JS :)
У вас часть кода работает с JQ объектами, а часть с DOM (вот и назвал гибридом). Если на чистом JQ используя его методы, то

num.each(function(n, e) {
    $(e).html($(e).html() += ' ' + ++n)
})


где .each() метод выполняющий тоже самое что for(...), n - это индекс текущего элемента, e - текуший элемент как DOM. А если доступен DOM имеющий innerHTML, то зачем же $(e).html($(e).html() += ' ' + ++n), если проще выполнить e.innerHTML += ' ' + ++n. Здесь $(e), это лишняя трата энергии. ;)

Aetae 05.09.2018 13:29

Цитата:

Сообщение от drakulawz (Сообщение 494007)
разве так будет работать, без цикла?
У меня не работает...

Что значит не работает, если вот прям тут работает? 0_о
Разве что древнюю какую версию jq используешь...

Dilettante_Pro 05.09.2018 13:30

Цитата:

Сообщение от drakulawz
Вот полноценный скрипт:

function srt(a, b) {
if (a > b) {
return -1;
}
if (a < b) {
return -1;
}
if (a == b) {
return 0;
}
}

drakulawz 05.09.2018 13:34

Цитата:

Сообщение от Dilettante_Pro
объект jQuery конкретного элемента DOM

ага, т.е. этот метод не применим напрямую к элементам DOM, понял... Благодарю за разъяснение.

drakulawz 05.09.2018 14:07

Цитата:

Сообщение от laimas
num.each(function(n, e) {
    $(e).html($(e).html() += ' ' + ++n)
})

На это брекетс ругается и выполнять отказывается вообще.

Цитата:

Сообщение от Aetae
Что значит не работает

значит, что ничего не происходит когда я жму по кнопке кроме ошибки $num is not defined. Начинает работать только так:
function sum() {
        $(num).append(function(i){return ' ' + ++i});
    }


В целом - так конечно короче и проще. Благодарю за подсказку.

laimas 05.09.2018 14:28

Цитата:

Сообщение от drakulawz
На это брекетс ругается и выполнять отказывается вообще.

Это от лени, скопировал не удалив лишнего. Должно быть $(e).html($(e).html() + ' ' + ++n). Но еще раз - не оправдано для простых операций получать JQ объект из доступного DOM объекта.

Dilettante_Pro 05.09.2018 14:41

Цитата:

Сообщение от drakulawz
$num is not defined

Невнимательно смотрите примеры.
У Aetae объявление переменных
var $num = $('.p'),


В вашем варианте при
var num = $('.p'),

достаточно
function sum() {
        num.append(function(i){return ' ' + ++i});
    }

Dilettante_Pro 05.09.2018 14:46

Еще вариант - для разнообразия
<div class="p">Первый</div>
<div class="p">Второй</div>
<div class="p">Третий</div>
<div class="p">Четвертый</div>
<button class="btn">Sum</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script>
var num = $('.p'),
        btn = $('.btn');

    btn.on({
        'click': sum
    });

    function sum() {
        num.html(function(i){return $(this).html() + ' ' + ++i});
    }
</script>

Вместо $(this).html() можно использовать this.innerHTML

drakulawz 05.09.2018 15:36

Цитата:

Сообщение от laimas
не оправдано для простых операций получать JQ объект из доступного DOM объекта.

Имеете в виду, что лучше делать нативными методами js?

Цитата:

Сообщение от Dilettante_Pro
Невнимательно смотрите примеры.
У Aetae объявление переменных
var $num = $('.p'),

Понял, я скопипастил только функцию... буду повнимательней.

Цитата:

Сообщение от Dilettante_Pro
Еще вариант - для разнообразия

А как функция понимает, что в num записаны цифры? Это в библиотеке jQuery всё приобразовывается?


Часовой пояс GMT +3, время: 17:25.