如何用jQuery替换Textarea中的href链接

时间:2013-07-30 11:57:54

标签: javascript jquery jquery-selectors

我对jQuery有一个基本的问题。

我实际上想要更改Textarea中的“a”标签。我知道“a”标签在textarea中不起作用所以我不能使用jQuery选择器来定位它们。

示例:

<textarea><a href="http://www.google.com"></a></textarea>

我想换成这个:

<textarea><a href="http://www.stackoverflow.com"></a></textarea>

这件事有什么基本解决方案吗?

编辑:我忘了提到第一个链接(http://www.google.com)不是静态链接。它将永远在变化。所以我需要一个终极解决方案。

4 个答案:

答案 0 :(得分:3)

这是一个例子;加载后,href将被取代:

<!DOCTYPE html>
<html>
    <head>
        <script>
                window.onload = function () {
                    var textarea = document.getElementsByTagName("textarea")[0];
                    textarea.innerHTML = 
                        textarea.innerHTML.replace(
                            /href=".*"/, 
                            "http://www.stackoverflow.com");
                }
        </script>
    </head>
    <body>
         <textarea><a href="http://www.google.com"></a></textarea>
    </body>
</html>

答案 1 :(得分:2)

如果要获取textarea的内容,将其置于不可见的div中,使用div中的jquery选择器进行更改,然后使用新内容重新填充textarea,该怎么办?

HTML:

<div style="display:none;"></div>
<textarea><a href="http://www.google.com"></a></textarea>

jQuery的:

$('div').html($('textarea').val());
$('div').find('a').attr('href', 'http://www.stackoverflow.com');
$('textarea').val($('div').html());

答案 2 :(得分:1)

var txt = $('textarea').text();
var ancStart = txt.toString().indexOf('<a');
var ancEnd = txt.toString().indexOf('a>') + 2;
var sl = (ancStart * -1) + ancEnd;
var newTxt = txt.slice(sl);
newTxt += '<a href="http://www.stackoverflow.com"></a>';
$('textarea').empty().text(newTxt);

jsFiddle DEMO

答案 3 :(得分:1)

使用快速拍在一起的正则表达式来处理textarea中所有类似链接的模式,这将可能做你想要的,但没有更多的上下文,它很难说出来肯定的是:

var new_url = "www.stackoverflow.com";
var text = $('textarea').html();
$('textarea').html(text.replace(/(&lt;a [^&]*href=['"])[^'"]*(['"][^&]*&gt;)/, "\$1"+new_url+"\$2"));

在此处查看此行动:http://jsfiddle.net/JaTAr/2/

这将在textarea中查找具有模式<a ...href='...'...>的任何内容,并将其替换为<a ...href='www.stackoverflow.com'...>。所以根据你的内容,它可能会很繁琐,但可能它会做你想要的。