• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Namierzanie elementów id JavaScript

Object Storage Arubacloud
+1 głos
206 wizyt
pytanie zadane 19 czerwca 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)
zamknięte 19 czerwca 2020 przez Marak123

Mam problem z namierzeniem elementu id="1" który jest w divie o id="przyciski". Wie ktoś może jak namierzyć element o id 1 w divie o id przyciski i ważne jest aby namierzanie nie było na cały dokument tylko w tym divie przyciski. Bo gdy daje 

document.getElementById("przyciski").getElementById("1");

to wyskakuje błąd z selektorem $() to samo a jak pisze

 document.querySelector("#" + zmn);

to nie działa (zmn to zmienna która przechowuje liczbe 1, ta zmienna jest potrzeba).

Wie ktoś jak namierzyć element w elemencie?

komentarz zamknięcia: Dzięki wszystkim za pomoc
1
komentarz 19 czerwca 2020 przez adrian17 Ekspert (345,160 p.)

to wyskakuje błąd z selektorem

...jaki?

to nie działa

...a co robi?

Come on :/

 

komentarz 19 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)

Taki błąd przy składni 

document.querySelector("#przyciski").getElementById(zmn)

błąd:

document.querySelector(...).getElementById is not a function

A przy takiej składni: 

document.querySelector("#przyciski").querySelector("#" + zmn);

i takiej:

document.querySelector("#" + zmn);

Taki błąd:

Failed to execute 'querySelector' on 'Element': '#1' is not a valid selector.

Ale chciałbym zaznaczyć ze jeżeli chodzi o id z napisem np."napis" nie ma problemu normalnie dziala problem się pojawia dopiero gdy np.id="1"

komentarz 19 czerwca 2020 przez VBService Ekspert (254,260 p.)
edycja 19 czerwca 2020 przez VBService

@Marak123, @Comandeer - na tym forum podał według Mnie super sposób na (pseudo)numerowane elementy html (div, button itp.). Moja luźna propozycja w oparciu o ten kod. (przepraszam nie podam, w którym wątku (pytaniu), gdzieś umknęło)


<!-- test.html -->
<style>
    #przyciski {
        width: 300px;
        height: 350px;
        font-size: 26px;
    }
    #przyciski div {
        border: 1px solid black;
        width: 100px;
        height: 30px;
        margin: 5px;
        padding-top: 5px;
        text-align: center;
        cursor: pointer;        
        font-weight: bold;
        color: black;
    }
    #przyciski div:active {
        transform: translateY(2px);
    }
    #przyciski span {
        display: block;
        margin: 5px;
        margin-top: 20px;
        font-variant: small-caps;
        font-size: 1.8rem;
        color: #e6d4d4;
    }
</style>

<div id="przyciski">
    <div id="p1">1</div>
    <div id="p2">2</div>
    <div id="p3">3</div>
    <div id="p4">4</div>
    <span id="message">Click:</span>
</div>

<script>
    window.onload = function() {
        const div = document.querySelectorAll('[id^="p"]');

        div.forEach((div) => {
            div.addEventListener('click', ( {target} ) => {
                const msg = document.getElementById('message');
                const id = Number( target.id.replace( 'p', '' ) );
                msg.innerHTML = "Click: id=" + target.id + " nr=" +id;
            });
        });
    }
</script>

 

2 odpowiedzi

0 głosów
odpowiedź 19 czerwca 2020 przez adrian17 Ekspert (345,160 p.)
wybrane 19 czerwca 2020 przez Marak123
 
Najlepsza
document.querySelector(...).getElementById is not a function

Brzmi jakby `document.querySelector("#przyciski")` zwracało nulla, więc nie ma elementu #przyciski.

Ale chciałbym zaznaczyć ze jeżeli chodzi o id z napisem np."napis" nie ma problemu normalnie dziala problem się pojawia dopiero gdy np.id="1"

Ogólnie id numeryczny nie jest dobrym pomysłem. We wcześniejszych wersjach HTMLa w ogóle nie był wspierany. Teraz jest, ale musisz trochę inaczej użyć querySelector: https://stackoverflow.com/a/20306237/2468469

komentarz 19 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
na pewno jest takie id jak przyciski bo używam takiego już i normalnie działa
komentarz 21 czerwca 2020 przez ScriptyChris Mędrzec (190,190 p.)

Metoda getElementById jest dostępna tylko w obiekcie document, a nie w kontekście dowolnego elementu DOM - tak jak jest w przypadku metody element.querySelector.

0 głosów
odpowiedź 19 czerwca 2020 przez Comandeer Guru (601,930 p.)

Id elementu powinno być unikalne, więc samo document.querySelector( '#1' ) powinno być w pełni wystarczające. Jeśli masz więcej niż jeden element o takim [id], to znaczy, że masz niepoprawny kod HTML.

Co do problemu: możliwe, że wywołujesz kod JS zanim element zostanie wczytany.

komentarz 19 czerwca 2020 przez adrian17 Ekspert (345,160 p.)

więc samo document.querySelector( '#1' ) powinno być w pełni wystarczające

Jak to się ma do tego? https://stackoverflow.com/a/20306237/2468469

komentarz 19 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)

@Comandeer, Kod js wywołuje się po wczytaniu tego elementu bo jest na samym dole znacznika body a nie ma 2 taki samych znaczników id

komentarz 19 czerwca 2020 przez Marak123 Stary wyjadacz (11,190 p.)
Dzięki wszystkim za pomoc rozwiązałem ten problem tak że zrobiłem po prostu funkcje która zamienia cyfry na napis po to bo zmieniłem id z cyfry na cyfrę słownie
1
komentarz 19 czerwca 2020 przez Comandeer Guru (601,930 p.)

@adrian17, faktycznie, powinno być escape'owane:

document.querySelector( CSS.escape( '#1' ) )

 

Podobne pytania

0 głosów
1 odpowiedź 488 wizyt
0 głosów
2 odpowiedzi 4,350 wizyt
pytanie zadane 28 stycznia 2017 w JavaScript przez MTB Użytkownik (690 p.)
+1 głos
0 odpowiedzi 295 wizyt

92,615 zapytań

141,465 odpowiedzi

319,779 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...