zmiana linków w wierszach tabeli w zależności od dwóch datepickerów

0

Hej,

na stronie mam dwa datepickery: dataStart, dataStop.
Mam także tabelę z n wierszami. W każdym wierszu inicjalnie jest link w stylu "href="pociąg/przyjazd/pocId=24&passengerId=168&myId=3" ( wiadomo id`ki rozne )

teraz chciałbym aby po wybraniu daty w datepicker dataStart js przerobił mi wszystkie linki na
pociąg/przyjazd/pocId=24&passengerId=168&myId=3&dataStart=<wybranaData>
gdy wybrany zostanie takze dataStop
pociąg/przyjazd/pocId=24&passengerId=168&myId=3&dataStart=<wybranaData>&dataStop=<wybranaData>
na razie mam tyle. Co już działa ale:

  1. dany parametr start lub stop musi być 1 raz w query stringu. teraz skrypt dodaje po prostu na końcu kolejny raz zmienne gdy wybiorę datę kilka razy. Trzeba by jakoś czyścić na początku skryptu query string do stanu wyjściowego czyli href="pociąg/przyjazd/pocId=24&passengerId=168&myId=3
    ale nie wiem jak...
  2. Jest jeszcze kwestia, że dataStart musi być 4 parametrem a dataStop 5. To już ztrudniejsze i chyba zostawie na po punkcie 1
var addChangeListener = function(id, paramName) {

        $(id).datepicker({
          onSelect: function (elem) {
            $('#employees tbody a').each(function () {
              var href = $(this).attr('href');
              var date = '&'+paramName+'='+$(id).val();
              $(this).attr('href', href + date);
            });
          }
        });
      };
1

A z czym masz konkretnie problem? Operowanie na stringach co prawda do najprostszych nie należy, ale nie jest to też rocket science.

Ja na Twoim miejscu darowałbym sobie stringi, zamiast tego operowałbym na obiektach, a stringi generował z tych obiektów, np mając taką tablicę linków (może być też obiekt z jakimiś ajdikami, nawet wygodniej):

const urlArr = [
  {
    pocId: 24,
    passengerId: 168,
    myId: 3
  },
  {
    pocId: 25,
    passengerId: 164,
    myId: 3
  },
]

można je sobie łatwo modyfikować bez obawy o duplikaty:

urlArr[0].dataStart = '12345'
urlArr[0].dataStart = '67890'

console.log(urlArr[0]) // => {"pocId":24,"passengerId":168,"myId":3,"dataStart":"67890"}

Na linkach bezpośrednio nie operujesz, tylko generujesz je sobie automatycznie z obiektu (tu sam query string):

function generateUrlQuery (queryObject) {
  return Object
    .keys(queryObject)
    .reduce((result, key) => `${result}${key}=${queryObject[key]}&`, '?')
    .slice(0, -1)
}

console.log(generateUrlQuery(urlArr[0])) // => "?pocId=24&passengerId=168&myId=3&dataStart=67890"

Co do punktu 2 - jeśli kolejność parametrów w query stringu ma u Ciebie jakieś znaczenie, to znaczy, że coś robisz źle.

PS
Nazewnictwo byle jakie powyżej, poza tym można to też zrobić (lepiej) bez mutacji, ale chciałem szybko samą ideę przekazać.

PS2
I sprawdź, czy czasem jQuery nie ma już takiego gotowca

1 użytkowników online, w tym zalogowanych: 0, gości: 1