Как изменить все href с указанием c URL? - PullRequest
4 голосов
/ 14 февраля 2020

Я хочу изменить все URL-адреса href = "", которые есть на моей домашней странице, но это конкретный c url.

Пример:

<a href="mydomain.com/issues/resolve"> The issue </a>

Переключиться на:

<a href = "mydomain.com/issues/resolve/#thecontent">The issue</a>

Я уточняю, что существует более одного с одним и тем же URL, я хочу изменить их все.

Я пробовал это без какого-либо видимого результата, что я делаю с javascript:

$enlaces = document.getElementsByTagName("a");

                  for (let i = 0; i < $enlaces.length; i++) {
                    $enlaces2 = $enlaces[i];

                    if ($enlaces[i].href == 'mydomain.com/issues/resolve') {
                        this.href = 'mydomain.com/issues/resolve/#thecontent';
                    }

                    console.log ($enlaces2);

                  }

Ответы [ 4 ]

4 голосов
/ 14 февраля 2020

Узел <a> имеет много свойств .

Дано:

тогда свойства, представляющие интерес здесь:

Эти и другие свойства доступны для чтения / записи.

Итак, из вопроса вы похоже, хочет проверить a.hostname + a.pathname. Если это так, то следующее будет делать то, что вы хотите:

$('a').each(function() {
    if ((this.hostname + this.pathname) == 'mydomain.com/issues/resolve') {
        this.hash = 'thecontent';
    }
});

Вы должны увидеть, почему тестирование свойства .href не сработало.

Примечания:

  • чтение: a.hash возвращает строку, включающую начальную #
  • запись: a.hash = "someString" не требует ха sh.
  • В этом браузере были исторические различия но я думаю, что они сейчас сглажены (стоит проверить).
0 голосов
/ 14 февраля 2020

Вы помечаете этот вопрос как jQuery, и я дам вам jQuery ответ:

$("a").each(function(){
if($(this).atrr("href")=="mydomain.com/issues/resolve/")
 $(this).atrr("href","mydomain.com/issues/resolve/#thecontent");
});

При этом == "mydomain.com/issues/ это плохая практика resol / ", как правило, атрибуты href содержат протоколы, поэтому я бы использовал indexOf вместо

$("a").each(function(){
if($(this).atrr("href").indexOf("mydomain.com/issues/resolve/") >= 0)
 $(this).atrr("href","mydomain.com/issues/resolve/#thecontent");
});
0 голосов
/ 14 февраля 2020

Проблема с вашим решением - «это» не определено. Я могу быть выше по цепочке, но она не установлена ​​для l oop. То, что вы хотите, больше похоже на

$enlaces = document.getElementsByTagName("a");

                  for (let i = 0; i < $enlaces.length; i++) {
                    $enlaces2 = $enlaces[i];

                    if ($enlaces[i].href == 'mydomain.com/issues/resolve') {
                        $enlaces[i].href = 'mydomain.com/issues/resolve/#thecontent';
                    }

                    console.log ($enlaces2);

                  }

Некоторые другие ответы могут касаться дополнительных проблем, таких как href, дающий полный URL со схемой, не обязательно относительный URL. Я не уверен, что ваши примеры URL-адресов даже действительны. Нужна схема или хотя бы // на старте.

0 голосов
/ 14 февраля 2020

Поскольку $enlaces[i].href дает вам ваш_домен + href значение, поэтому условие в условии if не произойдет.

Вам необходимо получить точное значение href с помощью attr('href') как показано ниже

$enlaces = document.getElementsByTagName("a");

for (let i = 0; i < $enlaces.length; i++) {
  $enlaces2 = $enlaces[i];
  var href_DOM_value = $($enlaces[i]).attr('href');
  var href_Actual_value = $enlaces[i].href;
  console.log(href_DOM_value);
  console.log(href_Actual_value);
  
  if (href_DOM_value == 'mydomain.com/issues/resolve') {
      $($enlaces2).attr('href', 'mydomain.com/issues/resolve/#thecontent');
      console.log("changed");
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="mydomain.com/issues/resolve"> The issue </a>
...