添加目标="_“空白”;链接到JavaScript
我需要写一个方法,它接受一个字符串并解析它的链接(a href)。如果找到链接,则应将target=“\u blank”添加到该链接(如果该链接尚未存在) 例如: 输入字符串“添加目标="_“空白”;链接到JavaScript,javascript,Javascript,我需要写一个方法,它接受一个字符串并解析它的链接(a href)。如果找到链接,则应将target=“\u blank”添加到该链接(如果该链接尚未存在) 例如: 输入字符串“ 和是搜索引擎 …应生成输出字符串 <a href="www.google.com" target="_blank">Google</a> and <a href="www.yahoo.com" target="_blank">Yahoo</a> are search en
和是搜索引擎
…应生成输出字符串
<a href="www.google.com" target="_blank">Google</a> and <a href="www.yahoo.com" target="_blank">Yahoo</a> are search engines
和是搜索引擎
知道如何实现吗?您可以使用jQuery解析元素,添加属性,然后读取HTML,如下所示:
var addTarget = function(input) {
return $('<span>' + input + '</span>').find('a').attr('target', '_blank').html();
};
console.log(addTarget('<a href="www.google.com">Google</a>'));
var addTarget=函数(输入){
返回$(''+输入+'').find('a').attr('target','u blank').html();
};
console.log(addTarget(“”));
充满问题,但可用于普通JavaScript:
函数addBlankTargets{
返回(“+s”)。替换(/和'
+ ' '
+“是搜索引擎。”;
var x=新增目标;
x、 //=>“和
//
//是搜索引擎
使用普通js不是很难
var links = document.getElementsByTagName('a');
var len = links.length;
for(var i=0; i<len; i++)
{
links[i].target = "_blank";
}
var links=document.getElementsByTagName('a');
var len=links.length;
对于两行中的(var i=0;i)
var links = document.getElementsByTagName('a');
for(i in links)
links[i].target=="_blank"?links[i].style.color="#f0f" : links[i].style.color ='#0f0'
如果您的目标是现代浏览器,那么您可以将字符串转换为DOM,而不必操作包含HTML的字符串并处理所有特殊情况。
在这一点上,操作DOM很简单,然后可以将其转换回序列化字符串
function decorateRichText(html) {
const domParser = new DOMParser()
const document = domParser.parseFromString(html, `text/html`)
const serializer = new XMLSerializer()
// Handles external links
const links = document.querySelectorAll(`a`)
links.forEach((link) => {
if (link.href) {
if (isExternalUrl(link.href)) {
link.target = `_blank`
link.rel = `noopener noreferrer`
}
}
})
return serializer.serializeToString(document)
}
让浏览器JS引擎完成繁重的工作,并记住:您不编写的代码是您不需要调试的代码:-)只需替换是否必须将s作为字符串检索?能否使用js将其作为元素获取?很遗憾,是的。无法通过DOM@Paul为什么不能通过dom访问它们呢?jQuery解决方案听起来不错,但我绝对是JavaScript的初学者如何将它们组合成一个字符串?@Paul:我更新了jQuery的完整性答案,看看这是否适用于您。基本上,在jQuery中,要获得“外部HTML”,您必须首先将项目包装在另一个元素中,并获得其内部HTML。
function decorateRichText(html) {
const domParser = new DOMParser()
const document = domParser.parseFromString(html, `text/html`)
const serializer = new XMLSerializer()
// Handles external links
const links = document.querySelectorAll(`a`)
links.forEach((link) => {
if (link.href) {
if (isExternalUrl(link.href)) {
link.target = `_blank`
link.rel = `noopener noreferrer`
}
}
})
return serializer.serializeToString(document)
}