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;