【问题标题】:Convert a <span>'s text into a hyperlink将 <span> 的文本转换为超链接
【发布时间】:2011-07-10 01:48:39
【问题描述】:

更新:
答案#3最终效果最好。我很可能对其他建议做错了; #3 可能是最容易实现的。如果您好奇,我尝试过的示例解决方案可以在这里找到(暂时):

  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

原帖:
我在&lt;span&gt; 标签中有一个纯文本网站地址。我想将该 标记更改为带有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>

【问题讨论】:

  • 你能在输出跨度中添加一个类吗?
  • 不,但我可以将输出跨度包装在另一个具有类的跨度中,以便它是 domain.com/about</span></span>
  • 不需要类/ID - 在特定元素上使用 for-each 循环

标签: jquery html hyperlink


【解决方案1】:

试试这个:

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

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

查看您的示例 HTML,我发现它只是第一个包含 URL 的 &lt;td&gt;。如果确实只有一个,您可以将first() 添加到选择器链中,如下所示:

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

如果它是包含链接的整个,那么您将希望对所有其他匹配项进行操作。通过将:even 附加到您的选择器来执行此操作,如下所示:

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

(是的,:even 而不是:odd 来选择第一个、第三个等元素,因为基于 0 的索引。)

【讨论】:

  • 我喜欢从其他“竞争性”答案中学习。我说,好家伙。
  • 嘿,谢谢你的欢呼。我同意:并排查看多个实现是本网站的一大优点。
  • 也拍了一张,在这里:dl.dropbox.com/u/1007716/spanToUrl/test03.html 也没有运气。
  • 您将代码放在实际 HTML 之前,因此 $('.sampleClass span') 返回一个空集,因为您要查找的元素尚不存在。尝试将该脚本块移动到 BODY 标记的末尾。
  • 哎呀,好的,用页面底部的脚本再拍一张。感谢您的关注 - 这可能会修复我打破的其他问题。
【解决方案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>

以上代码未经测试,但希望能引导您走向正确的方向。

【讨论】:

【解决方案3】:

使用 jQuery。

给 span 一个 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);

【讨论】:

【解决方案4】:

将 span 设置为 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

【讨论】:

【解决方案5】:

可能是这样的:(无需知道 ids/classes)使用 jquerys for-each 循环并专门针对 tds 内的跨度

$(文档).ready(函数(){ $('td span').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的.text()函数,html转义了&lt;&gt;字符,无意中将&amp;GT; &amp;LT;添加到dom中,而.html实际上输出了正确的标签

【讨论】:

  • 哇,喜欢这个社区。有这么多潜在答案的新手如何选择?感谢您提供 jsfiddle 链接 - 忘记了那个网站。我不确定哪个答案最好,我会在 CMS 中测试一些,看看它是否有效。
  • 我双嵌套并修改了脚本以反映双跨度,它接近工作,但输出不太正确。单引号似乎需要双引号才能工作。见这里:dl.dropbox.com/u/1007716/spanToUrl/test02.html
  • 太棒了,很高兴看到它即将为您工作!每当你让它发挥作用时,不要忘记将哪个答案标记为答案!
  • 答案已标记,进行了一些测试以确定哪个是最好的。上面编辑过的代码也可以工作,但它会产生一些无效的 HTML。这个例子可以在这里看到:dl.dropbox.com/u/1007716/spanToUrl/test06.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多