Найдите ссылки, содержащие определенную строку в href, и удалите href между косыми чертами только с помощью javascript

У меня есть вариант использования, когда мне нужно выбрать все <a>, содержащие строку в URL-адресе, например «/web/local», и удалить «/web/local» из всех ссылок всех этих ссылок.

Примечание: я не могу использовать jQuery. Я могу использовать либо чистый js, либо YUI.

Заранее спасибо.

Итак, ваши усилия до сих пор? пожалуйста, добавьте код, который вы пробовали до сих пор

Code Maniac 19.02.2019 19:21

Я сделал несколько попыток с совпадениями document.querySelector +, но не уверен, как правильно их использовать. Также существует ли какой-либо метод, например .contain()?

designershyam 19.02.2019 19:26

@designershyam Вы должны предоставить фрагменты или образцы своего кода, чтобы люди могли предложить, как его улучшить.

Naltroc 19.02.2019 19:31

document.querySelectorAll('a') вернет все теги привязки. Затем вы можете проверить и сравнить свойства HREF каждого из возвращенных элементов и изменить их по мере необходимости. Я позволю вам сначала попробовать код, прежде чем публиковать ответ.

daddygames 19.02.2019 19:32

@daddygames querySelectorAll('a') вернет список узлов, а не теги привязки.

Scott Marcus 19.02.2019 19:39

@ScottMarcus Упс! Спасибо, что прояснили это!

daddygames 19.02.2019 19:40
Поведение ключевого слова "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) для оценки ваших знаний,...
1
6
39
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

    <!DOCTYPE html>
<html lang = "en">

<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <meta http-equiv = "X-UA-Compatible" content = "ie=edge">
    <title>Document</title>
</head>

<body>

    <a href = "http:///web/locale/google.com">Link 1</a>
    <a href = "http:///web/locale/stackoverflow.com">Link 2</a>


    <script>

        var string = '/web/locale/';
        var links = document.getElementsByTagName('a');
        for (var i = 0; i < links.length; i++) {
            var link = links[i].getAttribute('href');
            link = link.replace(string, '');
            links[i].setAttribute('href', link);

        }
    </script>


</body>

</html>
getElementsByTagName() возвращает список активных узлов и должен использоваться только в редких случаях. Кроме того, вместо того, чтобы получать все ссылки и работать с href на всех них, вам действительно следует просто получить те, которые нужно заменить в первую очередь.
Scott Marcus 19.02.2019 19:33
Ответ принят как подходящий

См. встроенные комментарии:

let phrase = "/web/local";

// Get all the links that contain the desired phrase into an Array
let links = Array.prototype.slice.call(document.querySelectorAll("a[href*='" + phrase +"']"));

// Loop over results
links.forEach(function(link){
  // Remove the phrase from the href
  link.href = link.href.replace(phrase, "");
});

// Just for testing:
console.info(document.querySelectorAll("a"));
<a href = "http://www.something.com/web/local">Some Link</a>
<a href = "http://www.something.com/web/local">Some Link</a>
<a href = "http://www.something.com/web/local">Some Link</a>
<a href = "http://www.something.com/web/local">Some Link</a>
<a href = "http://www.something.com/web/local">Some Link</a>

Чтобы правильно получить/установить атрибут href, вам нужно использовать получить атрибут/setAttribute:

document.querySelectorAll('a[href* = "/web/local"').forEach(function(ele) {
  ele.setAttribute('href', 
           ele.getAttribute('href').replace('/web/local', ''));

    console.info(ele.outerHTML);
});
<a href = "/web/local"></a>
<a href = "22222/web/local"></a>
<a href = "/web/local"></a>

Вам не «нужно» использовать set/getAttribute. Вы также можете работать со свойством .href DOM.

Scott Marcus 19.02.2019 19:38

@ScottMarcus: я знаю, но используя свойство href вместо атрибута, вы меняете сам href, добавляя полный путь...... Спасибо

gaetanoM 19.02.2019 19:40

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