Javascript替换页面上的HTML标记

时间:2015-03-29 05:33:57

标签: javascript replace

我需要一个简单的脚本,在HTML中搜索特定代码,以便不显示。

我当前的代码仅替换整个文本。但如果一个人改变了一个项目,就找不到它。

有没有办法制作外卡,找到如下文字:

<a href="http://www.yourdomain.com">Thesite</a>

...如果找到

的话
<*yourdomain*</a> 

然后用空格替换整个<a href....>..</a>

我目前的代码是:

function checkLoad(){
    if (document.readyState === "complete") {
        document.body.innerHTML = document.body.innerHTML.replace(
             '<p style="text-align:center;">My Website is <a href="http://www.redriv.com/" target="_blank">redriv</a></p>',
             ""
        );
    } else {
        setTimeout('checkLoad();', 500)
    }
}

2 个答案:

答案 0 :(得分:1)

如果您希望仅基于href,可以使用CSS规则:

a[href=http://www.yourdomain.com] { display: none; }

要查找包含href的任何'yourdomain',请使用*=

a[href*=yourdomain] { display: none; }

如果你想包括对锚文本的检查,你需要JS:

function array(a) { return Array.prototype.slice.call(a); }
function check(a) { return /yourdomain/.test(a.textContent); }
function hide (a) { a.style.display = 'none'; }

var selector = 'a[href*=yourdomain]';
var anchors  = array(document.getQuerySelector(selector));

anchors . filter(check) . forEach(hide);

不,不要将regexp用于此操作或任何其他HTML操作。

答案 1 :(得分:0)

RegEx将是最简单的解决方案,类似于<a.*yourdomain.*?\/a>应该可以解决问题。它将删除其中包含yourdomain的锚标记(作为属性和属性值 - 您没有指定所需的准确度,因此一切都会被触发)。在这里看到:

&#13;
&#13;
var html = '<a href="http://www.yourdomain.com">Thesite</a><a href="http://www.goodurlhere.com">Good URL</a><a href="http://www.anothergood.com">Good URL</a>';
var replaced = html.replace(/<a.*yourdomain.*?\/a>/, '');
document.getElementById('f').textContent = html;
document.getElementById('r').textContent = replaced;
&#13;
p {color: #777}
span {color: black}
&#13;
<p>Sample markup: <span id="f"></span></p>
<p>After RegEx: <span id="r"></span></p>
&#13;
&#13;
&#13;

故意使用单行样本标记,以便您可以看到它不会触及其他锚点。


所以你的完整代码是:

function checkLoad(){
    if (document.readyState === "complete") {
        document.body.innerHTML = document.body.innerHTML.replace(/<a.*yourdomain.*?\/a>/, '');
    } else {
        setTimeout('checkLoad();', 500)
    }
}