0

我有一个关于 jQuery 的基本问题。

我真的想更改文本区域中的“a”标签。我知道“a”标签在文本区域中不起作用,所以我不能使用 jQuery 选择器来定位它们。

例子:

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

我想改成这样:

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

这个问题有什么基本的解决办法吗?

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

4

4 回答 4

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>
于 2013-07-30T12:02:23.643 回答
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());
于 2013-07-30T12:15:21.803 回答
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

于 2013-07-30T12:24:11.087 回答
1

使用快速拼接的正则表达式对文本区域中的所有类似链接的模式进行操作,这可能会满足您的需求,但如果没有更多上下文,很难确定:

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'...>. 因此,根据您的内容,它可能会很挑剔,但它可能会按照您的意愿行事。

于 2013-07-30T12:29:29.753 回答