1

I want to use pure JavaScript to hide all content inside brackets in a document. For example, this:

Sometext [info]

would be replaced with this:

Sometext

With jQuery I can do this with:

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

4 回答 4

2

的事件将documentDOMContentLoaded您传递给的回调同时触发jQuery(document).ready(...)

您可以通过document.body代替 jQuery("body") 来访问页面的正文,并使用属性.innerHTML不是jQuery 的.html()方法来修改 HTML 。

document.addEventListener("DOMContentLoaded", function(event) {
    var replaced = document.body.innerHTML.replace(/\[.*\]/g,'');
    document.body.innerHTML = replaced;
});
于 2013-07-18T14:25:13.313 回答
1

如果您使用 document.body.innerHTML 进行替换,它将替换 [] 之间的所有内容,甚至是输入名称等有效内容。所以我认为你需要的是获取所有的文本节点,然后在它们上运行正则表达式。 这个问题看起来可以解决问题。

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]);
  }
});
于 2013-07-18T14:35:27.297 回答
0

您已经有了解决方案,请尝试"Sometext [info]".replace(/\[.*\]/g,'');

于 2013-07-18T14:24:50.027 回答
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 );
    }
});
于 2013-07-18T14:25:45.743 回答