2011-02-08 4 views
6

Я пытаюсь заменить значения url на всей странице, используя некоторые ванильные Javascript. Я не могу использовать ЛЮБЫЕ библиотеки/рамки. Вот то, что я до сих пор, который был размещен в верхней части каждой страницы между тегами:Изменить ВСЕ ссылки, hrefs, urls with vanilla Javascript & regex

<script type="text/javascript"> 
function change_url() { 
    var str = ''; 
    str = str.replace(/blog\.domain\.info/g, 'blogtest\.domain\.info'); 
} 
change_url(); 
</script> 

Однако, это не работает при загрузке страницы.

В принципе, мне нужны ссылки для ресурсов, чтобы перейти от http://blog.domain.info к http://blogtest.domain.info. Простая задача, я знаю! Но код выше не работает до сих пор.

Предложения о том, что изменить?

+3

"vanilla Javascript" - вы делаете свою жизнь труднее, чем необходимо. jQuery и т. д. ftw! – ThiefMaster

+0

Нельзя использовать какой-либо тип фреймворка/библиотеки ... У вас ваниль. – JsusSalv

ответ

13

После прочтения комментарий, вам нужно что-то вроде

function replace_url(elem, attr) { 
    var elems = document.getElementsByTagName(elem); 
    for (var i = 0; i < elems.length; i++) 
     elems[i][attr] = elems[i][attr].replace('blog.domain.info', 'blogtest.domain.info'); 
} 

window.onload = function() { 
    replace_url('a', 'href'); 
    replace_url('img', 'src'); 
    // etc 
} 
+0

Это был действительно хороший ответ. Спасибо! – JsusSalv

+0

Нет проблем. :) <дополнительный текст, чтобы пропустить минимальную длину комментария> –

2

Если вы ориентируетесь ссылки, вы можете сделать это:

<script type="text/javascript"> 
    var els = document.getElementsByTagName('a'), 
     len = els.length; 

    while(len--) { 
     els[len].hostname = els[len].hostname.replace('blog.domain.info','blogtest.domain.info'); 
    } 
</script> 

Поместите этот скрипт только внутри закрытия </body> тега.

Для дополнительных тегов укажите имя и свойства тега, которые вы обновляете.

+0

Это тоже классно! Не видел этого вовремя, но попробуй его. Благодарим вас за помощь и информацию. – JsusSalv

0

Ну, это очень сложно, так как вы получаете элементы в заголовке, которые должны быть изменены до того, как они будут обнаружены? Если вы можете заставить JS работать до загрузки, возможно, но я в этом сомневаюсь. Вы можете выполнять пост-загрузку, находить записи, переписывать их и загружать их асинхронно, но код может так же пропускать события инициализации. Это усложнится.

Элементы могут быть решены с использованием подхода getElementsByTagName(), который упоминается в других ответах. Это нормально для src/href изменений, но не будет заботиться о CSS-изображениях, в частности, background-image, что может произойти на множестве элементов. Тогда возникает вопрос о таких вещах, связанных с классами, для чего потребуется очистка записей классов, что является болью. Я сомневаюсь в изменении метаинформации, такой как RSS-каналы, значки и т. Д., Вступает в силу после загрузки.

Было бы лучше справиться с этим на стороне сервера.

+0

Это было отличное объяснение, и я полностью согласен. Хотел бы я, но это для платформы, на которой уже есть функции и вещи, плавающие вокруг. Перенос JS на серверный интерфейс был бы идеальным, но для этого потребовались бы значительные изменения. Но я полностью согласен с вашей оценкой! – JsusSalv

+0

О, я не имел в виду перемещение серверной части JS, изменение URL-адреса, все это в HTML/CSS, поэтому вам просто нужно разобрать его и внести изменения. В ASP.Net вы можете просто поймать событие PreRender, если это PHP, вы можете использовать буферизацию вывода и, возможно, регулярное выражение такого рода изменений. – Orbling

+0

Буферизация вывода - это то, что я бы использовал обычно. Однако, не вариант ... еще! – JsusSalv

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