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)

drakulawz 05.09.2018 11:49

Почему метод .html() не работает так как .innerHTML()?
 
Здравствуйте!

Есть такой скрипт:

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

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

    function sum() {
        for (var i = 0; i < num.length; i++) {
            num[i].innerHTML = num[i].innerHTML + ' ' + (i + 1);
        }
    }


Он должен ставить в конце каждого параграфа его, соответствующий, номер. НО! Проковырялся с jQuery минут 20 в итоге его метод .html() так и не вывел нумерацию в браузере (хотя через console.log(num) нумерация присваивается). В отличии от его аналога в нативном js - .innerHTML() - этим всё выводится (console.log(num) выводит всё то же, что и с html).
Буду очень благодарен если мне объяснит знающий человек в чём тут дело, так как во всех источниках указано, что эти методы являются аналогами друг друга.

laimas 05.09.2018 12:08

Цитата:

Сообщение от drakulawz
в чём тут дело

Не правильное использование.

Dilettante_Pro 05.09.2018 12:15

<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() {
        for (var i = 0; i < num.length; i++) {
            $(num[i]).html( $(num[i]).html() + ' ' + (i + 1));
        }
    }
</script>

drakulawz 05.09.2018 12:25

Цитата:

Сообщение от Dilettante_Pro
Dilettante_Pro

Благодарю! :D

Aetae 05.09.2018 12:31

<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.append(function(i){return ' ' + ++i});
    }
</script>

drakulawz 05.09.2018 12:48

Цитата:

Сообщение от Aetae
Aetae

разве так будет работать, без цикла?
У меня не работает...

Цитата:

Сообщение от Dilettante_Pro
Dilettante_Pro

кстати, а как записать вот такое через html:

function sum() {
        var arr = [];
        for (var i = 0; i < num.length; i++) {
            arr[i] = +num[i].innerHTML;
            inp.val(arr.sort(srt));
        }
    }


Функция сортирует номера в параграфах и выводит в инпут, по возрастанию. Но когда ставлю вместо innerHTML html то выводит NaN. :cray:

Dilettante_Pro 05.09.2018 12:56

Цитата:

Сообщение от drakulawz
Но когда ставлю вместо innerHTML html то выводит NaN.

Вместо нельзя.
innerHTML - это свойство элемента DOM
.html() - это метод объекта jQuery
Смотрите внимательно пример в пост 3

laimas 05.09.2018 13:06

Цитата:

Сообщение от drakulawz
как записать вот такое через html

Если уж "гибрид", то:

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

drakulawz 05.09.2018 13:06

Цитата:

Сообщение от Dilettante_Pro
Вместо нельзя.

ОК. Тогда почему их называют аналогами друг друга?
https://x-twig.ru/blog/239/

Цитата:

Сообщение от Dilettante_Pro
Смотрите внимательно пример в пост 3

Я увидел, рассмотрел, понял и, даже, запомнил. Метод html записывает в массив параграфов тот же параграф но с добавлением нумерации - это понятно. Вся проблема была не в понимании а в синтаксисе - мне, почему-то, сложно запомнить эти нюансы.

drakulawz 05.09.2018 13:16

Цитата:

Сообщение от laimas
Если уж "гибрид"

ещё не совсем понимаю значение слова гибрид в js.
Вот полноценный скрипт:
var   num = $('.p'),
        btn = $('.btn'),
        inp = $('input');

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

    function sum() {
        var arr = [];
        for (var i = 0; i < num.length; i++) {
            arr[i] = +num[i].innerHTML;
            inp.val(arr.sort(srt));
        }
        
    }

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


Всё работает, я же говорил. Просто думал писать всё на jQuery, но теперь выходит, что так нельзя и innerHTML не заменится тут...


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