Получить href из определенного класса

Я хочу получать конкретные ссылки из своей почты и открывать их в новом окне.

Получил на данный момент вот что:

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();

Но каждый раз, когда я получаю новое письмо, название класса меняется. Так что каждый раз я получал разные имена в классе. Итак, как мне найти только начало класса и изменить его в моем коде?

Какие-нибудь решения? (:

Следуют ли имена классов определенному шаблону? Всегда ли это confirm_link<some numbers>? Существуют ли другие ссылки, следующие этому шаблону, которые вы не хотите открывать?

Luca Kiebel 14.09.2018 14:12

Если имя класса меняется, вам нужен другой селектор ... Нам нужна дополнительная информация по рассматриваемому элементу ... В этом случае вам понадобится document.querySelectorAll.

Steven Spungin 14.09.2018 14:13

Попробуйте getQuerySelector, как в этом посте: stackoverflow.com/questions/8714090/…

Javi Mollá 14.09.2018 14:14

@LucaKiebel Итак, confirm_link <some numbers> каждый раз отличается, и я получил его 2 раза, а вторую ссылку я не хочу открывать только первую.

faketalent 14.09.2018 14:15

@StevenSpungin, но как я могу реализовать это в моем коде?

faketalent 14.09.2018 14:16

Нам нужно больше контекста, чтобы помочь вам с селектором. Я отправлю ответ, чтобы вы это увидели.

Steven Spungin 14.09.2018 14:18

@StevenSpungin, что ты имеешь в виду, больше контекста? Извините, я новичок в этом: /

faketalent 14.09.2018 14:21
Context означает более подробную информацию о вашей проблеме, например html, к которому относится ваш сценарий.
Steven Spungin 14.09.2018 14:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
199
2

Ответы 2

Используйте синтаксис 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".

faketalent 14.09.2018 14:27

Класс меняется, но начало занятия каждый раз одно и то же.

faketalent 14.09.2018 14:29

Теперь работает спасибо! Но код останавливается после того, как он получает первую ссылку и открывает ее. Почему?

faketalent 14.09.2018 14:39

Объясните, пожалуйста, «остановка кода». Исключение? Заморозить? Что говорит твоя консоль?

Steven Spungin 14.09.2018 14:40

Я отправляю код, тогда код нашел одну ссылку, открывающую его. Но есть еще 3 ссылки, которые должны открыться.

faketalent 14.09.2018 14:41

У вас работает блокировщик всплывающих окон?

Steven Spungin 14.09.2018 14:42

Нет, я не использую блокировщик всплывающих окон.

faketalent 14.09.2018 14:43

Для открытия необходимо использовать уникальное имя окна. Ознакомьтесь с обновленным ответом. Имейте в виду, что фрагмент SO не открывает окна.

Steven Spungin 14.09.2018 14:52

@faketalent Для начала у вас class*= вместо class^=

Steven Spungin 14.09.2018 20:27

@faketalent remove document.querySelector('button').addEventListener('click', ()=>{ Это было только для демонстрации фрагмента

Steven Spungin 14.09.2018 20:28

@faketalent вам не нужен внутренний цикл `if (items [i] .href.indexOf (" confirm ")> -1)`

Steven Spungin 14.09.2018 20:30

@faketalent Я добавил ваш исправленный код в конец своего ответа.

Steven Spungin 14.09.2018 20:32

Какой браузер вы используете?

Steven Spungin 14.09.2018 21:54

Я использую Google Chrome.

faketalent 14.09.2018 21:55

Я тоже использую хром, и он работает. Похоже, у вас есть блокировщик всплывающих окон или что-то еще, ограничивающее ваши окна. Когда я помещаю пример кода в html-файл с контейнером div и запускаю его со своего рабочего стола, открываются 3 окна.

Steven Spungin 14.09.2018 22:05

Может почта ограничила мой код? Или код не находит другие ссылки?

faketalent 14.09.2018 22:06

Я добавил console.info в пример во фрагменте. Попробуй это.

Steven Spungin 14.09.2018 22:07

У R.I.P Google Chrome есть собственный блокировщик всплывающих окон xD Понял! Благодарю вас <3

faketalent 14.09.2018 22:09

@faketalent Отлично! Не забудьте принять ответ, а также удалить ответ, который вы разместили в качестве примера. Удачного кодирования!

Steven Spungin 14.09.2018 22:11

Насколько я знаю, используйте код 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 14.09.2018 21:05

@faketalent, вы хотите, чтобы каждый якорь отображался в новом окне?

Negi Rox 17.09.2018 07:30

Другие вопросы по теме