我有一个目录列表脚本,该脚本输出各种组织的名称及其网站地址。用户看到的网站链接看起来像http://www.whatever.com或http://whatever.com
为了使外观看起来更漂亮,我想删除链接的http://元素。因此,从用户角度来看,最终结果应该以html的形式表示, justthedomainname.com
编写和输出php脚本的方式使执行此操作有些麻烦,我认为使用某些javascript可能更容易实现。
我最初尝试的方法是:
<script>
var curInnerHTML = document.body.innerHTML;
curInnerHTML = curInnerHTML.replace("http://", "");
document.body.innerHTML = curInnerHTML;
</script>
这是行不通的,因为它一直在寻找一个确切的字符串“ http://”,而该字符串总是跟在实际的域之后。
有什么想法可以在纯JS中实现吗?
答案 0 :(得分:1)
您需要一个正则表达式而不是字符串。像这样的东西。
curInnerHTML = curInnerHTML.replace(/^https?:\/\//i, "");
答案 1 :(得分:0)
如果我对您的理解正确,则想从包含某个网站URL的字符串中删除http://www.
。
您可以使用正则表达式
let result = url.replace(/^(https?:\/\/)?(www\.)?/,'', '');
如果您只想剥离http://
并保留www
,请使用此正则表达式
let result = url.replace(/(^\w+:|^)\/\//,'', '');
这是一个有效的代码段
let url = "http://www.whatever.com";
let result = url.replace(/^(https?:\/\/)?(www\.)?/,'', '');
console.log(result);
答案 2 :(得分:0)
如果您仅在寻找<a>
元素,和只会尝试替换[用户]看到的文本内容:
document.querySelectorAll( 'a[href^="http"]' ).forEach( function ( current ) {
current.textContent = current.href.split('//')[ 1 ];
} );
在.forEach()
NodeList上有关于.querySelectorAll()
的{{3}}
答案 3 :(得分:0)
尝试一下
function remove(){
var a = document.getElementById('target').getElementsByTagName('a');
var attr;
for (var i = 0; i < a.length; i++) {
attr = a[i].getAttribute("href").replace("http://", "");
a[i].text = attr;
}
}
remove();
<div id="target">
<a href="http://test1.com">http://test1.com</a>
<a href="http://test2.com">http://test2.com</a>
</div>