2011-03-07 87 views
8

更新:
答案#3结束了最佳工作。我很可能做了其他建议有问题的地方; #3可能是最容易实现的。如果你很好奇,我试过的例子的解决方案可以在这里找到(现在):将<span>的文本转换为超链接

  1. http://dl.dropbox.com/u/1007716/spanToUrl/test01.html
  2. HTTP: //dl.dropbox.com/u/1007716/spanToUrl/test02.html
  3. http://dl.dropbox.com/u/1007716/spanToUrl/test03.html(冠军)
  4. http://dl.dropbox.com/u/1007716/spanToUrl/test04.html
  5. HTTP ://dl.dropbox.com/u/1007716/spanToUrl/test05.html
  6. http://dl.dropbox.com/u/1007716/spanToUrl/test06.html

原贴:
我有一个<span>标签内的一个纯文本的网站地址。我想这<跨度>标签变成正确的超级链接与target="_blank"

我已经把我与这里的工作一个详细的例子:http://bit.ly/spantourl

如果你不想点击进入,这里是我有:

<span>http://www.domain.com/about</span> 

,我需要更改为:

<a href="http://www.domain.com/about" target="_blank">http://www.domain.com/about</a> 
+0

能你添加一个类到输出范围? – Josh 2011-03-07 02:56:05

+0

不,但我可以将输出范围用一个类包装到另一个范围,以便它可以是 http://www.domain.com/about ox4dboy 2011-03-07 02:58:48

+0

不需要classes/id - 在特定元素 – 2011-03-07 03:07:50

回答

15

试试这个:

$('.sampleClass span').replaceWith(function() { 
    var url = $.trim($(this).text()); 
    return '<a href="' + url + '" target="_blank">' + url + '</a>'; 
}); 

不需要each,因为replaceWith可以迭代多个元素并可以将函数作为参数。

看看您的示例HTML,我发现它只是第一个包含URL的<td>。如果确实只有一个,你可以添加first()到选择链,就像这样:

$('.sampleClass span').first().replaceWith(/* ... */); 

如果是关系到整个包含链接,比你想每隔匹配操作。通过附加:even你的选择,这样做:

$('.sampleClass span:even').first().replaceWith(/* ... */); 

(是的,:even,而不是:odd选择第1,第3,&Ç元素,因为从零开始的索引。)

+0

我喜欢从其他“竞争”答案中学习。我说,快活好吧。 – 2011-03-07 03:09:10

+0

嘿,谢谢你的加油。我同意:看到多个并行的实现是这个网站的最好的事情之一。 – Ori 2011-03-07 03:17:38

+0

也在这一个,在这里: 一个镜头https://dl.dropbox.com/u/1007716/spanToUrl/test03.html 没有运气得到这个工作。 – ox4dboy 2011-03-07 03:39:39

2

认沽ID和像

var linkText = $("#yourspanid").text(); 

$("<a/>").attr({"href": linkText, "target": "_blank"}).text(linkText).appendTo("body"); 
$("#yourspanid").remove(); 

那么你可以做一些改变,根据您的编辑跨度

var elems = $("span.myClass > span"); 
elems.each(function(){ 
    var linkText= $(this).text(); 
    $("<a/>").attr({"href": linkText, "target": "_blank"}).text(linkText).appendTo("body"); 
}); 
elems.remove(); 

看到一个working demo

+0

上使用for-each循环,可能像所有其他元素一样顶起这个元素,但这不是工作形式,请参阅: https://dl.dropbox.com/u/1007716/ spanToUrl/test05.html – ox4dboy 2011-03-07 03:52:04

+0

我该怎么做。 – s84 2011-03-07 03:55:02

2

你需要有某种形式的身份,以做从节点A到节点B的转换。我会建议沿着以下几行:

JQuery代码:

<script type="text/javascript"> 

    $('.convertableIdentifier').each(function(i, el) { 

     // grab the url and the link text 
     var url = $(el).html(); 

     // create a new node with query by decorating a 
     // empty a tag 
     var newNode = $('<a></a>').attr('href', url).attr('target', '_blank').html(url); 

     // replace the current node with our new node 
     $(el).replaceWith(newNode); 

    }); 

</script> 

的HTML:

<span class="convertableIdentifier">http://www.google.com</span> 
<span class="convertableIdentifier">http://www.youtube.com</span> 
<span class="convertableIdentifier">http://www.facebook.com</span> 

上面的代码没有进行测试,但应该有希望导致你在正确的方向。

+0

'.replaceWith()'可以遍历一个集合,所以不需要将它包装在'each'中。看到我的答案。 – Ori 2011-03-07 03:06:41

+0

做了一个jsfiddle它http://jsfiddle.net/GyK3q/ – Loktar 2011-03-07 03:06:48

+0

拍了一下这里: https://dl.dropbox.com/u/1007716/spanToUrl/test01.html 没有运气得到它的工作在我的网页上,即使它在jsfiddle工作,在这里:http://jsfiddle.net/GyK3q/ – ox4dboy 2011-03-07 03:37:17

2

使用jQuery。

给跨度的ID:

<span id="linkChange">http://domain.com</span> 

jQuery代码:

var href = jQuery('#linkChange').html(); 
var link = "<a href='"+href+"' target='_blank'>"+href+"</a>"; 

jQuery('#linkChange').replaceWith(link); 
+0

没有运气,尝试此解决方案在这里: https://dl.dropbox。com/u/1007716/spanToUrl/test04.html – ox4dboy 2011-03-07 03:42:07

+0

为我工作... – Gautam 2017-07-05 18:35:18

1

也许是这样的:(不需要知道IDS /班)for-each循环期运用jquerys和specificly目标跨越TDS内

$(文件)。就绪(函数(){ $( 'TD跨度' ).each(function(){ $(this).text(“”+ $(this).text()+“”); }); });

编辑:此代码的效果要好得多:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('td span').each(function(){ 
      $(this).html("<a href='" + $(this).html() + "' />" + 
       $(this).html() + "</a>"); 
     }); 
    }); 
</script> 

的原始使用jQuery的哪个HTML逃脱<>字符.text()功能,无意中插件&GT; &LT;到DOM,而实际上的.html输出正确的标签

+0

哇,爱这个社区。新手如何选择这么多潜在的答案?谢谢你的jsfiddle链接 - 忘记了那个网站。我不确定哪个答案最好,我会在CMS中测试一些,看看它是否有效。 – ox4dboy 2011-03-07 03:23:45

+0

我双重嵌套和修改脚本以反映双跨度,它接近工作,但输出不太正确。单引号似乎需要双引号才能起作用。看到这里: http://dl.dropbox.com/u/1007716/spanToUrl/test02.html – ox4dboy 2011-03-07 03:49:02

+0

很好,很高兴看到它接近为你工作!无论何时你确实得到它的工作,不要忘记标记为答案哪个回答最有帮助! – 2011-03-07 05:41:58