Я хочу получать конкретные ссылки из своей почты и открывать их в новом окне.
Получил на данный момент вот что:
function OpenHrefsInNewWindow() {
//Get class name
var items = document.getElementsByClassName("confirm_link123");
var i = 0;
while(i < items.length)
{
//Get a part from the specific link
if (items[i].href.indexOf("confirm") > -1)
{
//If it does, open that URL in a new window.
window.open(items[i].href, "_blank");
}
i++; //Increment i here.
}
}
OpenHrefsInNewWindow();
Но каждый раз, когда я получаю новое письмо, название класса меняется. Так что каждый раз я получал разные имена в классе. Итак, как мне найти только начало класса и изменить его в моем коде?
Какие-нибудь решения? (:
Если имя класса меняется, вам нужен другой селектор ... Нам нужна дополнительная информация по рассматриваемому элементу ... В этом случае вам понадобится document.querySelectorAll.
Попробуйте getQuerySelector, как в этом посте: stackoverflow.com/questions/8714090/…
@LucaKiebel Итак, confirm_link <some numbers> каждый раз отличается, и я получил его 2 раза, а вторую ссылку я не хочу открывать только первую.
@StevenSpungin, но как я могу реализовать это в моем коде?
Нам нужно больше контекста, чтобы помочь вам с селектором. Я отправлю ответ, чтобы вы это увидели.
@StevenSpungin, что ты имеешь в виду, больше контекста? Извините, я новичок в этом: /
Context означает более подробную информацию о вашей проблеме, например html, к которому относится ваш сценарий.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте синтаксис class^=, чтобы найти классы, которые start with. Чтобы открыть несколько окон, сгенерируйте уникальное имя вместо использования '_blank'.
const items = document.querySelectorAll('*[class^ = "confirm_link"]')
console.info(items)
document.querySelector('button').addEventListener('click', ()=>{
for(let i=0; i<items.length; i++){
console.info(items[i])
window.open(items[i].getAttribute('href'), 'window' + i)
}
})<div id='container'>
<div class = 'foobar' >
<a class='confirm_link1' href='http://www.google.com'></a>
<a class='confirm_link2' href='http://www.google.com'></a>
<a class='confirm_link3' href='http://www.google.com'></a>
</div>
</div>
<button>click me</button>Ваш пример должен выглядеть так:
function OpenHrefsInNewWindow() {
//Get class name
const items = document.querySelectorAll('*[class^ = "confirm_link"]')
var i = 0;
while (i < items.length) {
console.info('opening', items[i].getAttribute('href'))
window.open(items[i].getAttribute('href'), "window" + i);
i++; //Increment i here.
}
}
OpenHrefsInNewWindow();
Да, но я просто хочу найти начало моего класса, если его "confirm_link", чем его истинное, после этого он проверит ссылку, если она содержит "confirm".
Класс меняется, но начало занятия каждый раз одно и то же.
Теперь работает спасибо! Но код останавливается после того, как он получает первую ссылку и открывает ее. Почему?
Объясните, пожалуйста, «остановка кода». Исключение? Заморозить? Что говорит твоя консоль?
Я отправляю код, тогда код нашел одну ссылку, открывающую его. Но есть еще 3 ссылки, которые должны открыться.
У вас работает блокировщик всплывающих окон?
Нет, я не использую блокировщик всплывающих окон.
Для открытия необходимо использовать уникальное имя окна. Ознакомьтесь с обновленным ответом. Имейте в виду, что фрагмент SO не открывает окна.
@faketalent Для начала у вас class*= вместо class^=
@faketalent remove document.querySelector('button').addEventListener('click', ()=>{ Это было только для демонстрации фрагмента
@faketalent вам не нужен внутренний цикл `if (items [i] .href.indexOf (" confirm ")> -1)`
@faketalent Я добавил ваш исправленный код в конец своего ответа.
Какой браузер вы используете?
Я использую Google Chrome.
Я тоже использую хром, и он работает. Похоже, у вас есть блокировщик всплывающих окон или что-то еще, ограничивающее ваши окна. Когда я помещаю пример кода в html-файл с контейнером div и запускаю его со своего рабочего стола, открываются 3 окна.
Может почта ограничила мой код? Или код не находит другие ссылки?
Я добавил console.info в пример во фрагменте. Попробуй это.
У R.I.P Google Chrome есть собственный блокировщик всплывающих окон xD Понял! Благодарю вас <3
@faketalent Отлично! Не забудьте принять ответ, а также удалить ответ, который вы разместили в качестве примера. Удачного кодирования!
Насколько я знаю, используйте код ES2015 вместо ES2016.
var links = document.querySelectorAll('*[class^ = "confirm_link"]');
document.querySelector("button").addEventListener("click", function() {
for (var i = 0; i < links.length; i++) {
var _href = links[i].getAttribute("href");
if (_href.indexOf("confirm") > -1)
window.open(_href, "_blank");
}
});
используйте это может быть это будет полезно
Также просто открываем одно окно ..: /
@faketalent, вы хотите, чтобы каждый якорь отображался в новом окне?
Следуют ли имена классов определенному шаблону? Всегда ли это
confirm_link<some numbers>? Существуют ли другие ссылки, следующие этому шаблону, которые вы не хотите открывать?