если 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, время: 05:52. |