2014-01-02 3 views
0

Мне нужен небольшой и компактный, поэтому я делаю такие испытания, у меня есть что-то, что работает немного, просто почему-то не добавляет новый html ...заменяет childNodes textNodes на новый HTML (url replacer)

var a = document.querySelectorAll('.post .content div'); 
var b = a[7].childNodes; 
for(i=0;i<b.length;i++){ 
    var exp = /(\b(https?|ftp|file):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|])/ig; 
    if(b[i].nodeType === 3){ 
    var ahref = document.createElement('a'); 
     ahref.className="easyBBurlFetch"; 
     ahref.href=b[i].nodeValue.replace(exp,'$1'); 
     ahref.innerText=b[i].nodeValue.replace(exp,'$1'); 
    b[i].parentNode.insertBefore(ahref,b[i]); 
    b[i].parentNode.removeChild(b[i]); 
    } 
    } 

Testing Fiddle

ответ

1

Попробуйте изменить последнюю строку на b[i].parentNode.removeChild(b[i].nextSibling); так с текущим вы удаляете один и тот же элемент, который был добавлен в предыдущем шаге. Причина в том, что childNodes возвращают живую коллекцию, и когда вы добавляете элемент к тому же parentNode, ваш элемент @ b [i] не является текстовым узлом, а скорее будет якорем, который вы только что добавили. А также при работе с кешем живой коллекции длина до руки:

var a = document.querySelectorAll('.post .content div'); 
var b = a[0].childNodes; 

for(i=0, l=b.length;i<l;i++){ //Cache the length here in variable l 
    var exp = /(\b(https?|ftp|file):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|])/ig; 
    if(b[i].nodeType === 3){ 
     ........... 
    b[i].parentNode.insertBefore(ahref,b[i]); 
    b[i].parentNode.removeChild(b[i].nextSibling); //remove the next element to the added element 
    //Or 
    //b[i].parentNode.removeChild(b[i+1]); 
    } 
    } 
+0

Ahh, что имеет смысл, и хорошие шляпы btw lol ... проверены и работают правильно! Большое спасибо PSL – EasyBB

+0

@EasyBB Добро пожаловать ... – PSL

+0

Эй, PSL, как я могу предотвратить это: 'url.com/vi/7cmqVQaWQiw%20this%20is%20going%20to%20be%20more%20text%20to% 20try% 20this% 20coding% 20out' первый% 20, а после - текстовая строка после ... – EasyBB

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