2015-12-03 3 views
1

У меня есть шаблон электронной почты для отправки на уведомления доставки, который включает в себя номер перевозкы груза отслеживая, как показано ниже, и мне нужно, чтобы очистить все пробелы из href, используя обычный JavaScript:Изменение HREF атрибута всех ссылок с помощью равнину Javascript только

<a class="press-bt" id="clearSpace" href="https://www.royalmail.com/track-your-item?trackNumber=JX12 0008 990 90GB">TRACK</a> 

я могу получить это право с помощью JQuery, но не с помощью Javascript

Я пытаюсь сделать это следующим образом:

window.onload = function() { 
    var str = document.getElementById("mylink"); 
    document.write(str.replaceAll("\\s+","")); 
}); 

Рабочий код U петь JQuery:

$(document).ready(function() { 
    $('a').attr('href', function (_, val) { 
     return val.replace(/\s/g, ''); 
    }); 
}); 
+1

Почему вы не нацеливаете «mylink» в jQuery? – Andy

+0

JQuery работает! Мне нужно это на простое JS – Skwashy

+0

Да, но почему вы не используете '$ ('# myink'). Attr'? – Andy

ответ

0

Таргетинг элемент в соответствии с его id, возьмите HREF атрибут, и установить его снова, удаляя пробелы.

var link = document.getElementById("mylink"); 
var href = link.getAttribute('href'); 
link.setAttribute('href', href.replace(/\s/g, '')); 
2

Вы должны, если возможно, удалить серверы на стороне сервера. Надеюсь, вы поймете no javascript будет работать в отправляемых вами электронных письмах.

// This prevents multiple `window.onload` conflict 
window.addEventListener("load", clearLinks); 
// This allows you to call the function even later if needed 
function clearLinks() { 
    // Get list of all links in the page 
    var links = document.getElementsByTagName("a"); 
    // Loop through links 
    for(var i=0,l=links.length; i<l; i++) { 
    // No need to use `getAttribute`, href is defined getter in all browsers 
    links[i].href = links[i].href.replace(/\s/g, ""); 
    } 
} 

В современных браузерах вы можете заменить цикл for Array.prototype.forEach. Этот метод может быть обычно называют на массивах ([ ... ]), но список возвращаемого getElementsByTagName не является массив, так что используйте этот трюк:

function clearLinks() { 
    var links = document.getElementsByTagName("a"); 
    // Loop through links 
    Array.prototype.forEach.call(links, function(link) { 
    link.href = link.href.replace(/[cC]/g, "c"); 
    }); 
} 

Искать Function.prototype.call, чтобы узнать больше о вызове функций на объектах.

+0

Спасибо за сообщение, к сожалению, мой Mac GPU перестает работать при работе над этим фрагментом кода :-(Теперь мне придется подождать неделю, пока я не смогу его исправить, я отправлю отзыв, когда он вернется. – Skwashy

+0

@Skwashy хорошо, я надеюсь, что вы не подразумеваете, что этот код сгорел на вашей графической карте. Это было бы даже не смешно –

+0

Не потому, что код Lol я использую мой mac наверху все время Cinema 4D, 3D Max, After Effects, Photoshop, и т.д... – Skwashy

Смежные вопросы