если js находится в body то конечно его будет плющить
|
вот так
function FindReplace (word, img) {
var elements = document.body.getElementsByTagName('*');
var element, html, i = 0, tagN;
var regE = new RegExp (word,'ig');
var leng = elements.length;
(function closing() {
element = elements[i];
tagN = element.tagName.toLowerCase();
if ( tagN == 'script' || tagN == 'style')end();
html = element.innerHTML;
if( html.search(regE)== -1) end();
element.innerHTML = html.replace(regE,img);
function end () {
if (i > leng-1) return;
console.log(i > leng-1)
i++;
setTimeout(closing,0);
}
end();
}());
}
FindReplace('lol','<img src="http://ctrlc.ru/wp-content/uploads/2012/06/18.jpg" >')
|
mooni,
Вам нужно более точный критерий поиска - для этого искать элементы не во всём body а в четко ограниченном каким то div с id - месте - желательно что данный div с id не включал в себя скрипты и кликабельно событийные элементы - либо искать в нём еще и подъэлементы, обрамляющие контент, которые не затрагивают событийных кнопок Например на PHBB для поиска в постах #pun .post .post-content (приведен css селектор - который реализуем в скрипте через цикл |
последний скрипт вообще не работает.(
div class="font1" на том форуме посты в этом диве выводятся. Никаких скриптов и событийных элементов там нет. |
var elements = document.body.getElementsByClassName('font1');
получается, так надо поменять? |
нет, что за бред?
var elements = document.getElementsByClassName('font1')[0].getElementByTagName('*');
|
Спасибо. Но это решение ведь не кроссбраузерное?
|
у вас 3 варианта:
1.забить на ие 6-7 2.использовать id 3.юзать эту функцию
function FindClass(FindClass){
var allTag, allElem, arrE = [], i;
if(document.getElementsByClassName){
return document.getElementsByClassName(FindClass);
}
allElem = document.body.getElementsByTagName('*');
i = allElem.length;
while(i--){
if(allElem[i].className == FindClass) arrE.push(allElem[i]);
}
return arrE;
}
|
Спасибо! Всё получилось. :)
|
И снова проблемы =(
function FindClass(FindClas){
var allTag, allElem, arrE = [], i;
if(document.getElementsByClassName){
return document.getElementsByClassName(FindClas);
}
allElem = document.body.getElementsByTagName('*');
i = allElem.length;
while(i--){
if(allElem[i].className == FindClas) arrE.push(allElem[i]);
}
return arrE;
}
function FindReplace (word, img) {
var elements = FindClass('font1');
var element, html, i = 0;
var regE = new RegExp (word,'ig');
var leng = elements.length;
(function closing() {
element = elements[i]
html = element.innerHTML;
if( html.search(regE)== -1){
end();
return;
}
console.log(html.replace(regE,img))
element.innerHTML = html.replace(word,img);
function end () {
if (i > leng-1) return;
console.log(i > leng-1)
i++;
setTimeout(closing,0);
}
end();
}());
}
FindReplace('[tab]','<img src="http://i294.photobucket.com/albums/mm119/lazarncane/1.gif" >')
Вот всё бы хорошо, только одно но. Если в одном блоке div class=font1 несколько раз встречается искомый [tab], то скрипт заменяет только первый [tab], а следующие оставляет. |
| Часовой пояс GMT +3, время: 10:01. |