2013-07-18 3 views
1

Я хочу использовать чистый JavaScript для скрытия всего содержимого внутри скобок в документе. Например, это:Скрыть содержимое внутри скобок, используя чистый JavaScript

SOMETEXT [Информация]

будет заменен следующим образом:

SOMETEXT

С JQuery я могу сделать это с:

<script type="text/javascript"> 
    jQuery(document).ready(function(){ 
     var replaced = jQuery("body").html().replace(/\[.*\]/g,''); 
     jQuery("body").html(replaced); 
    }); 
</script> 

ответ

1

Если вы используете, document.body.innerHTML для замены, это будет заменить все между [], даже действительными, например, именами ввода. Поэтому я думаю, что вам нужно захватить все текстовые поля, а затем запустить регулярное выражение на них. This question looks like it will do the trick.

function recurse(element) 
{ 
    if (element.childNodes.length > 0) 
     for (var i = 0; i < element.childNodes.length; i++) 
      recurse(element.childNodes[i]); 

    if (element.nodeType == Node.TEXT_NODE && /\S/.test(element.nodeValue)){ 
     element.nodeValue = element.nodeValue.replace(/\[.*\]/g,''); 
    } 
} 

document.addEventListener('DOMContentLoaded', function() { 
    // This hits the entire document. 
    // var html = document.getElementsByTagName('html')[0]; 
    // recurse(html); 

    // This touches only the elements with a class of 'scanME' 
    var nodes = document.getElementsByClassName('scanME'); 
    for(var i = 0; i < nodes.length; i++) { 
    recurse(nodes[i]); 
    } 
}); 
+0

Да. Ты прав! – Andrei

+0

Как заставить ваш пример работать? – Andrei

+0

@Andrei Отредактировано так, чтобы оно работало, и добавил код, чтобы он попадал только на определенные узлы, а не все в документе. – miah

0

У вас уже есть решение, попробуйте "Sometext [info]".replace(/\[.*\]/g,'');

+0

Ну Sometext [info] является примером. Insted of this может быть что угодно – Andrei

+0

Я знаю, я только что продолжил с вашим примером :) – Marcelo

2

The document's DOMContentLoaded event будет стрелять в то же время, что и обратный вызов вы передаете jQuery(document).ready(...).

Вы можете получить доступ к телу страницы через document.body вместо jQuery ("body") и изменить HTML с помощью the .innerHTML property вместо jQuery's .html() method.

document.addEventListener("DOMContentLoaded", function(event) { 
    var replaced = document.body.innerHTML.replace(/\[.*\]/g,''); 
    document.body.innerHTML = replaced; 
}); 
+0

это ядерная опция, она будет удалять все и все [], включая действительные, например, те, что указаны в именах входных данных. См. Мой ответ за то, что попадает только на текстовые узлы. – miah

+0

Это да, это работает. И я тщательно отвечу на этот ответ. Но что, если я хочу, чтобы это работало только для с классом = "scanME"? – Andrei

+0

'var cells = document.querySelectorAll ('td.scanME')' будет искать эти элементы для вас, но в отличие от jQuery стандартный JavaScript DOM API не позволит вам изменять все эти элементы сразу. Вам нужно будет написать цикл 'for (var i = 0; i

0

В основном то, что делают ваши это

document.addEventListener('DOMContentLoaded', function() { 
    var replaced = document.body.innerHTML.replace(/\[.*\]/g,''); 
    document.body.innerHTML = replaced 
}); 

Это было бы глупо идея, хотя (говоря для себя)

сделать вашу жизнь проще & ваш сайт лучше делать что-то вроде этого

<p> Sometext <span class="tag-variable"> [info] </span> </p> 

document.addEventListener('DOMContentLoaded', function(){ 
    var tags = document.getElementsByClassName('tag-variable'); 
    for(var i = 0; i < tags.length; i++) { 
     var current = tags[i]; // Work with tag here or something 
     current.parentNode.removeChild(current); 
    } 
});