<bgdev />free

Вход

Въпрос за JS
0

#11803 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1525 пъти.

Я ми обяснете защо става така:

var temp = document.getElementsByClassName("btn")
undefined

temp.length
19

temp[0].classList.remove("btn")
undefined

temp.length
18

Защо remove("btn") който очаквам да премахне класа btn от елемента temp[0] премахва и самият елемент от масива?

#11804 (ツ) synergie
Създадено на 23.09.2020, видяно: 1520 пъти.
johnfound

Я ми обяснете защо става така:

var temp = document.getElementsByClassName("btn")
undefined

temp.length
19

temp[0].classList.remove("btn")
undefined

temp.length
18

Защо remove("btn") който очаквам да премахне класа btn от елемента temp[0] премахва и самият елемент от масива?

Я по екзистенциален въпрос - защо не мога да си редактирам мненията?

Иначе - като махнеш бтн класа и списъка с елементите които имат този клас също се променя.

#11806 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1516 пъти.
synergie
johnfound

Я ми обяснете защо става така:

var temp = document.getElementsByClassName("btn")
undefined

temp.length
19

temp[0].classList.remove("btn")
undefined

temp.length
18

Защо remove("btn") който очаквам да премахне класа btn от елемента temp[0] премахва и самият елемент от масива?

Я по екзистенциален въпрос - защо не мога да си редактирам мненията?

Иначе - като махнеш бтн класа и списъка с елементите които имат този клас също се променя.

Вече можеш да си редактираш мненията, но не го възприемай като награда за отговора за JS, защото в него ти само повтаряш това, което и без това е очевидно.

Но защо? В края на краищата този списък е формиран някъде другаде в програмата и въобще можеше да съдържа всякакви елементи.

#11808 (ツ) synergie
Последно редактирано на 23.09.2020 от synergie, видяно: 1508 пъти.

Защото някакви долни Гани дето толко бизнеси унищожиха и запратиха Рабин на село са го дизайнвали. От документацията:

Syntax

var elements = document.getElementsByClassName(names); or:

elements is a live HTMLCollection of found elements.`

п.с. Виждаш ли си бъга? Сега ако нямах едит права не можех да го посоча в тоя пост.

#11810 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1506 пъти.
synergie

elements is a live HTMLCollection of found elements.

Добре де, досещам се какво значи "live" в този контекст. А как да я убия в такъв случай, така че да могат да се променят елементите без да изчезват от списъка?

#11811 (ツ) synergie
Създадено на 23.09.2020, видяно: 1503 пъти.
johnfound
synergie

elements is a live HTMLCollection of found elements.

Добре де, досещам се какво значи "live" в този контекст. А как да я убия в такъв случай, така че да могат да се променят елементите без да изчезват от списъка?

Ми правиш си копие. Сложността става 2 * О(N).

Бъга е че апострофа на code snippet-a се вижда в мнението.

#11813 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1499 пъти.
synergie

Ми правиш си копие. Сложността става 2 * О(N).

Бъга е че апострофа на code snippet-a се вижда в мнението.

Сложността не може да стане 2*О(N) - прочети малко за тия работи.

А бъга го знам отдавна и все някога ще го оправя.

Използвай ;begin и ;end тагове за форматиране на блок от код. Обратните кавички са за форматиране с моноширинен шрифт в рамките на реда, а не за форматиране на код.

#11819 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1494 пъти.
synergie

Ми правиш си копие.

Не знам какво разбираш под копие, но var temp2 = temp; не работи.

#11821 (ツ) synergie
Създадено на 23.09.2020, видяно: 1493 пъти.
johnfound
synergie

Ми правиш си копие. Сложността става 2 * О(N).

Бъга е че апострофа на code snippet-a се вижда в мнението.

Сложността не може да стане 2*О(N) - прочети малко за тия работи.

А бъга го знам отдавна и все някога ще го оправя.

Използвай ;begin и ;end тагове за форматиране на блок от код. Обратните кавички са за форматиране с моноширинен шрифт в рамките на реда, а не за форматиране на код.

Айде бе не може да стане 2 * О(Н). И кой го казва това?

Аз чета ей тука и там пише:

После като видиш съвпадение и упдейтваш един long, и накрая го печаташ. Мисля че идва два пъти О(n) или както там се пишеше.

#11822 (ツ) synergie
Последно редактирано на 23.09.2020 от synergie, видяно: 1490 пъти.
johnfound
synergie

Ми правиш си копие.

Не знам какво разбираш под копие, но var temp2 = temp; не работи.

Итерираш през елементите и ги добавяш в нов масив

#11826 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1486 пъти.

Оф, да ви имам на всички "експертизата"... rofl

Намерих си го сам. :-P

var temp = Array.from(document.getElementsByClassName("btn"));
#11828 (ツ) Courvoisier
Създадено на 23.09.2020, видяно: 1483 пъти.

А ти какво искаш, да махнеш .className от атрибута class ли?

#11830 (ツ) johnfound
Последно редактирано на 23.09.2020 от johnfound, видяно: 1477 пъти.
Courvoisier

А ти какво искаш, да махнеш .className от атрибута class ли?

Искам да махна един от класовете на група елементи, но да остане списъка, така че после по него да им добавя друг клас.

#11831 (ツ) synergie
Създадено на 23.09.2020, видяно: 1461 пъти.
johnfound
Courvoisier

А ти какво искаш, да махнеш .className от атрибута class ли?

Искам да махна един от класовете на група елементи, но да остане списъка, така че после по него да им добавя друг клас.

Eхеее така става 3 * О(Н). Добави първо новия клас па после махай стария бе Жонка. 🐐

#11834 (ツ) Courvoisier
Последно редактирано на 23.09.2020 от Courvoisier, видяно: 1456 пъти.

Disclaimer: Не претендирам, че съм javascript-бок, не съм писал такъв от 2017-та.

Вече имаш начин да копираш листа. Друг начин на чист JS:


function removeClass(ele, value) { 
    var buttons = document.getElementsByClassName(ele);
    
    for (var i = 0; i < buttons.length; i++)
        buttons[i].className = buttons[i].className.replace(value, '');

}

Трябва да оправиш празните места rofl

Ако искаш да махнеш и добавиш в един цикъл

Но ако можеш, бих си го написал с jQuery

Добавям jQuery през console-ата. За да не копирам в fiddle


javascript: (function(e, s) {
    e.src = s;
    e.onload = function() {
        jQuery.noConflict();
        console.log('jQuery injected');
    };
    document.head.appendChild(e);
})(document.createElement('script'), '//code.jquery.com/jquery-latest.min.js')

И после в някаква функция (Нарочно не е с $):


jQuery('.btn').each(function(i) { 
    jQuery(this)
        .removeClass('btn-actice')
        .addClass('my-class');

});

И как те са го направили @ https://github.com/jquery/jquery/blob/master/src/attributes/classes.js

#11846 (ツ) Courvoisier
Създадено на 23.09.2020, видяно: 1442 пъти.

Между другото, сега не знам за HTTP2, ни преди като правех повече сайтове, правихме CSS bundle И JS bundle минифицирани и ги реферирахме в страницата. Заучен съм, че е грешно да имам style и script тагове по страницата. След това, като изключим twitter bootstrap, останалия JS винаги го слагах в края на страницата от кой файл да се зарежда.

#11848 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1433 пъти.
Courvoisier

Между другото, сега не знам за HTTP2, ни преди като правех повече сайтове, правихме CSS bundle И JS bundle минифицирани и ги реферирахме в страницата. Заучен съм, че е грешно да имам style и script тагове по страницата. След това, като изключим twitter bootstrap, останалия JS винаги го слагах в края на страницата от кой файл да се зарежда.

Ами специално за това, генералната линия се мени на всеки 3 месеца. rofl

Аз лично предпочитам да инлайнвам CSS-а в хедъра на страницата - рендирането на страницата е мигновено, а за обемите CSS с които аз боравя, кеширането е безпредметно.

За JS-та въобще нямам някакво определено мнение, по простата причина, че първо съм много зле там - този език нито го харесвам, нито го разбирам. Но обикновено също го слагам в HTML-а и гледам да е по-малко и да работи някак си... rofl

#11945 (ツ) Евлампи
Създадено на 23.09.2020, видяно: 1409 пъти.
johnfound

Оф, да ви имам на всички "експертизата"... rofl

Намерих си го сам. :-P

var temp = Array.from(document.getElementsByClassName("btn"));

Ползвай document.querySelectorAll, просто вместо само името на класа трябва напишеш точка преди него (цсс клас селектор).

Връща статична колекция - The Document method querySelectorAll() returns a static (not live) NodeList, някои предпочитат да му дадат псевдоним - var $ = document.querySelectorAll() или нещо друго по-кратко

#11948 (ツ) johnfound
Създадено на 23.09.2020, видяно: 1404 пъти.
Евлампи
johnfound

Оф, да ви имам на всички "експертизата"... rofl

Намерих си го сам. :-P

var temp = Array.from(document.getElementsByClassName("btn"));

Ползвай document.querySelectorAll, просто вместо само името на класа трябва напишеш точка преди него (цсс клас селектор).

Връща статична колекция - The Document method querySelectorAll() returns a static (not live) NodeList, някои предпочитат да му дадат псевдоним - var $ = document.querySelectorAll() или нещо друго по-кратко

O! Супер! Точно каквото ми трябваше.

#11974 (ツ) Евлампи
Създадено на 23.09.2020, видяно: 1390 пъти.
johnfound

O! Супер! Точно каквото ми трябваше.

querySelectorAll и querySelector (връща само един (първият срещнат) елемент и може да се ползва вместо getElementById само че с префикс # пред id-то, css id selector) са съвременните унифицирани апита за селект на елемент/елементи по айди, таг, клас и изобщо всякакъв вид произволно сложен цсс селектор със синтаксис като в цсс-а

Въпрос за JS
0

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE