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

Zakres atrybutu w selektorze CSS używanym w JS

+2 głosów
278 wizyt
pytanie zadane 15 lutego 2022 w JavaScript przez Jcob2222 Użytkownik (590 p.)

Dzień dobry!

Chciałbym aby ten kod odnosił się do elementu który ma wartość x1 taką samą jak cx oraz w przedziale 10 w lewo i w prawo. To znaczy: chcę aby pobierało element którego x1 jest równy cx oraz mieści się w zakresie od cx-10 do cx+10.

Apath = document.querySelector('line[x1="'+cx+'"]').id;

 

2 odpowiedzi

0 głosów
odpowiedź 15 lutego 2022 przez ScriptyChris Mędrzec (190,170 p.)
wybrane 15 lutego 2022 przez Jcob2222
 
Najlepsza

Z tego co wiem, atrybucyjny selektor CSS nie obsługuje przedziałów liczbowych. Więc raczej musisz ręcznie wypisać wszystkie możliwe kombinacje (łącząc je selektorem listy), które chcesz obsługiwać, np.:

Apath = document.querySelector(`
  line[x1="${cx - 2}"],
  line[x1="${cx - 1}"],
  line[x1="${cx}"],
  line[x1="${cx + 1}"],
  line[x1="${cx + 2}"],
`.trim()).id;

Ewentualnie przenieść etap wyliczania do jakiejś pętli i mieć to reużywalne, np. (zasięg od -3 do 3, żeby dane wyjściowe nie zajęły dużo miejsca):

const getRangeSelectors = (createSelector, value, minOffset, maxOffset) => {
  const rangeSelectors = [];

  for (let offset = minOffset; offset <= maxOffset; offset++) {
    rangeSelectors.push(createSelector(value + offset, offset < maxOffset));
  }

   return rangeSelectors;
};

const selectors = getRangeSelectors((rangeValue, willBeNext) => {
    const optionalListSeparator = willBeNext ? ',' : '';
    
    return `line[x1="${rangeValue}"]${optionalListSeparator}`;
}, 0, -3, 3);
// 0: "line[x1=\"-3\"],"
// 1: "line[x1=\"-2\"],"
// 2: "line[x1=\"-1\"],"
// 3: "line[x1=\"0\"],"
// 4: "line[x1=\"1\"],"
// 5: "line[x1=\"2\"],"

Apath = document.querySelector(selectors).id;

 

+2 głosów
odpowiedź 15 lutego 2022 przez Comandeer Guru (607,960 p.)

Napisz sobie funkcję, która będzie Ci generowała taki selektor. Podajesz jej wartość cx i na tej podstawie generujesz tablicę wszystkich selektorów dla każdej wartości cx osobno. Na końcu se robisz z tego jeden selektor przy pomocy tablicaSelektorow.join( ',' ).

Inna rzecz, że mam wrażenie, że to XY problem. Co chcesz tak naprawdę osiągnąć?

komentarz 15 lutego 2022 przez Jcob2222 Użytkownik (590 p.)
Głównym problemem, który chce rozwiązać jest to:

https://forum.pasja-informatyki.pl/560119/javascript-svg

Teraz próbuję wybrać wszystkie linie które mają x1 lub x2 podobne do cx aktualnie przenoszonego elementu i ustawiać im za pomocą pętli x1 lub x2 równe cx

Podobne pytania

0 głosów
1 odpowiedź 3,536 wizyt
pytanie zadane 3 sierpnia 2015 w JavaScript przez Tomohomo Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 388 wizyt
pytanie zadane 27 kwietnia 2019 w HTML i CSS przez frederrer Użytkownik (740 p.)
0 głosów
2 odpowiedzi 1,260 wizyt
pytanie zadane 9 sierpnia 2022 w HTML i CSS przez skylar Nowicjusz (170 p.)

93,731 zapytań

142,668 odpowiedzi

323,286 komentarzy

63,291 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...