Поиск и удаление строки в HTML на JQuery или JavaScript

D
На сайте с 09.06.2006
Offline
165
15375

Господа, кто спец в JQuery или JavaScript? Вопрос достаточно тривиальный, но интересен в своей реализации, может есть гуру, кто предложит самый универсальный вариант решения? :)

В общем, нужен скрипт, который бы сидел в HTML и вырезал определенную строку из источника.

Т.е. есть HTML код страницы

<html>

<head></head>
<body>
table tr td
li
h1
p
текст
table
%5fdre
div
p
</body>
</html>

И если мы подключаем наш скрипт

<html>

<head>

<script type="text/javascript">
найти_и_убить(%5fdre);</script>

</head>
<body>
table tr td
li
%5fdre
h1
p
текст
table
%5fdre
div
p
</body>
</html>

То скрипт находит все совпадения "%5fdre" и удаляет их из HTML. Естественно, в браузере со включенной поддержкой скриптов.

Есть варианты такого скрипта с поиском и удалением строк внутри слоев с каким-то заранее известным id.идентификатором, но мне надо универсальный обработчик.

Возможно ли это? :)

DIAFAN.CMS (http://www.diafan.ru/), система управления сайтами.
Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#1

diafan, jquery - empty(),remove(),detach() - насколько универсальный обработчик нужен?

D
На сайте с 09.06.2006
Offline
165
#2
Ёхан Палыч:
diafan, jquery - empty(),remove(),detach() - насколько универсальный обработчик нужен?

Ёхан Палыч, я ж говорю: подключаешь его к любой странице, указываешь строку и обработчик просто эту строку из HTML удаляет. :) Можно в пределах <body></body>

T
На сайте с 20.03.2007
Offline
67
Toy
#3

Хотите удалить элемент кода? Или строку текста? Для первого воспользуйтесь getElementById, затем removeChild. Если хотите удалять часть текста, то просто заменяйте содержимое определенного элемента на пустое, либо урезанное (как нужно вам).

Я так полагаю вы хотите удалять информацию проставленную на ваш сайт не вами, а значит нужно смотреть, чтобы скрипт удаляющий хлам, запускался лишь после того как нужные элементы будут внесены в DOM структуру сторонним скриптом.

А не продаваемые ли вы ссылки хотите удалять? ;-) Чтобы пользователи их не видели, но поисковики индексировали? :-) Если это так, то о гугле забудьте, он поймет что вы хотите кого-то надурить.

D
На сайте с 09.06.2006
Offline
165
#4
Toy:
Я так полагаю
Toy:
А не продаваемые ли вы ссылки хотите удалять?

Toy, я никого дурить не намерен, не надо гадать, просто предложите готовый вариант решения, если он у Вас есть. :)

Найти ссылки на справочники не проблема. ;)

Еще раз повторяю, getElementById не пойдет, т.к. искомая строка - не элемент с id, а просто строка. В коде это может быть просто текст типа метки "%5fdre", или вообще в виде строки комментария "<!-- nnn -->".

Размещать эти метки в HTML буду я сам, заранее расставляя в определенных местах.

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#5
diafan:
Ёхан Палыч, я ж говорю: подключаешь его к любой странице, указываешь строку и обработчик просто эту строку из HTML удаляет. Можно в пределах <body></body>

Для jquery есть плагины, например, вызов $("body *").replaceText( "text", "" ); удалит нужную строку "в пределах <body></body>", поддерживает регулярные выражения - примерно так $('#test *').replaceText( /(?!<b>)\b(a)\b(?!<\/b>)/gi, '<b>$1<\/b>', true );

H
На сайте с 13.06.2011
Offline
9
#6

без плагина :)

$(document).ready(function(){
$(":contains('SEARCH_TEXT')").not(":has(:contains('SEARCH_TEXT'))").each( function() {
var trigger = $(this);
var html = trigger.html();
html = html.replace(/SEARCH_TEXT/, "REPLACE_TEXT");
trigger.html( html );
});
});

работать будет медленно правда, если на странице куча текста, сами понимаете, сколько нодов нужно перебрать)

ускорить можно указав хотя бы в каких тегах искать нужную вам конструкцию

$("div:contains('SEARCH_TEXT')").not("div:has(:contains('SEARCH_TEXT'))").each( function() {...

$("table td:contains('SEARCH_TEXT')").not("table td:has(:contains('SEARCH_TEXT'))").each( function() {...

Слово не воробей. Все не воробей, кроме воробья!
D
На сайте с 09.06.2006
Offline
165
#7

Ёхан Палыч, что-то он не работает... :( Может я его не так подключаю, конечно... Но судя по строке в описании плагина "Note that only text content will be modified, leaving all tags and attributes untouched" он не совсем то, что надо.

Haubergeon:
без плагина

Работает :) Но тоже ищет только в текстах между тегами. А мне надо, чтобы весь источник html воспринимался как текст, чтобы можно было вырезать вплоть до строки с куском тега вроде "><tabl"

rbbumfirst
На сайте с 03.04.2009
Offline
87
#8

          

<script type="text/javascript">

function t1(search){
body = document.body.innerText;
regex = new RegExp(search,"gim");
document.body.innerText = '';

document.write(body.replace(regex,''));
}

function t2(search){
body = document.body.innerHTML;

regex = new RegExp(search,"gim");
document.body.innerHTML = '';

document.write(body.replace(regex,''));
}

</script>


и чуть ниже


<body onload="t('%5fdre')">
<body onload="t2('<p>%5fdre</p>')"> <!-- если в тегах -->
Web developer (http://rudov.com). разработка на Go, ReactJS, React Native
D
На сайте с 09.06.2006
Offline
165
#9
rbbumfirst:
          


<script type="text/javascript">

function t1(search){
body = document.body.innerText;
regex = new RegExp(search,"gim");
document.body.innerText = '';

document.write(body.replace(regex,''));
}

function t2(search){
body = document.body.innerHTML;

regex = new RegExp(search,"gim");
document.body.innerHTML = '';

document.write(body.replace(regex,''));
}

</script>




и чуть ниже

<body onload="t('%5fdre')">
<body onload="t2('<p>%5fdre</p>')"> <!-- если в тегах -->

Что-то тоже не пашет :o Ни в тегах ни вне их.

rbbumfirst
На сайте с 03.04.2009
Offline
87
#10

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">

<head>
<title>yyy</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>
<body onload="t('<p>%5fdre</p>')">
<script type="text/javascript">

function t(search){
body = document.body.innerHTML;

regex = new RegExp(search,"gim");
document.body.innerHTML = '';

document.write(body.replace(regex,''));
}



</script>
table tr td
li
%5fdre
h1
p
текст
table
<p>%5fdre</p>
div
p

</body>
</html>

JS работает хоть? короч во всех бро кроме 6-го осла проверил. у меня работает.

доктайп влияет на правильность работы JS .

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий