Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加目标="_“空白”;链接到JavaScript_Javascript - Fatal编程技术网

添加目标="_“空白”;链接到JavaScript

添加目标="_“空白”;链接到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)。如果找到链接,则应将target=“\u blank”添加到该链接(如果该链接尚未存在)

例如: 输入字符串“

和是搜索引擎
…应生成输出字符串

<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)
}