Javascript 如何将提取的href转换为超链接

Javascript 如何将提取的href转换为超链接,javascript,jquery,tagging,Javascript,Jquery,Tagging,我正在一个类似Facebook的网站上做一个标签部分。这个想法是,每当有人在post区域键入@,就会出现一个下拉菜单,其中包含他的所有朋友。然后,他选择要标记的人,并点击此人的个人资料。我有一个javascript函数,该函数检测何时按下@,然后调用另一个js函数,该函数随后向php文件发送ajax请求以获取列表。这部分效果很好 因此,当用户从朋友列表中单击某人时,我将其设置为从php文件中以纯文本形式提取包含朋友用户名的href部分,然后在post区域中的@字符后面显示为文本字符串(单击ret

我正在一个类似Facebook的网站上做一个标签部分。这个想法是,每当有人在post区域键入@,就会出现一个下拉菜单,其中包含他的所有朋友。然后,他选择要标记的人,并点击此人的个人资料。我有一个javascript函数,该函数检测何时按下@,然后调用另一个js函数,该函数随后向php文件发送ajax请求以获取列表。这部分效果很好

因此,当用户从朋友列表中单击某人时,我将其设置为从php文件中以纯文本形式提取包含朋友用户名的href部分,然后在post区域中的@字符后面显示为文本字符串(单击
return:false
后,我阻止跟踪配置文件)。例如,当有人想选择约翰·史密斯时,他按@,列表出现,他选择约翰·史密斯,点击他的个人资料,列表消失,然后用户名出现在@之后,如下图所示:@John_Smith

现在的问题是,我想让john_smith在@之后变成一个超链接,从而生成john smith的个人资料,而不仅仅是纯文本。我一直在努力寻找解决办法。任何帮助都将不胜感激

非常感谢!:)

**//php-ajax文件**

首先,我会稍微修改一下PHP响应,以便更容易获得firend的全名

**//php ajax file**

    <?php

    $userLoggedIn = $_POST['userLoggedIn'];

    $userLoggedIn = new User($con, $userLoggedIn);

    $rez = array();
    $rez = $userLoggedIn->getFriendArray();


    if ($rez != ",") {

    $no_commas = explode(",", $rez);

    foreach ($no_commas as $key => $value) {

        $friend = mysqli_query($con, "SELECT first_name, last_name, username, profile_pic FROM users WHERE username='$value'");

        $row = mysqli_fetch_assoc($friend);

         echo "<div class='displayTag'>

                        <a href=" . $row['username'] . " id='grabLink'>         

                            <div>
                                <img src='" . $row['profile_pic'] . "'>
                            </div>  

                            <div class='fullname'>

                                " . $row['first_name'] . " " . $row['last_name'] . "
                                <p style='margin: 0;'></p>
                                <p id='grey'></p>

                            </div>

                            </a>    

                    </div>";


    }


    }

    else {

    echo "<br><p id='ynf'>You have no friends. Please add someone</p>";
    }   
**//php-ajax文件**

我不相信您的click事件正在捕获单击,因为您的php正在动态创建list元素。另外,函数
textTag()
在该函数运行之前不会实际应用该事件,因此可能会产生问题。将您的JS更改为-

$(document).on('click', '.displayTag a', function() {
    var href = $(this).attr('href');
    //other code applying href to new anchor tag in proper format
});

你能不能把这段文字放到锚定标签里?你需要在这篇文章中加入一些代码,最好做一个简化的例子。至少是代码的一部分,您将用户名附加到domSure,我会立即添加代码您的结果是什么?什么不起作用?@Adjit代码没问题,据我所知,问题是我无法将帖子区域中@符号后显示的用户名转换为链接到用户个人资料的超链接。阿尔瓦罗,谢谢,但不幸的是它不起作用。当我点击一个朋友的名字时,这个列表就会消失——这是应该的——但在帖子区域中只有@。它后面没有名字,不是纯文本,也不是链接。我检查了控制台,没有错误。Chrome和Vivaldi的结果都是一样的。它现在起作用了,我已经编辑了我的原始问题。忘记了strip_标记用于所有帖子:(您的解决方案现在正在运行。谢谢!:)php不是在客户端加载之前完成运行吗?php在服务器上side@Huangism但是当一个人输入
@
时,PHP不是在运行一个查询来检索用户列表吗?你是对的,这是js中的一个ajax调用,因此需要事件委派
function textTag() { // for extracting href and placing @ and username anywhere in the post area

            $('.displayTag a').click(function(a){

            var fullname = $(this).find('.fullname').text();
            var x = '<a href="' + $(this).attr('href') + '">'+fullname +'</a>';
            var y = $(this).prop('href');

            var $txt = jQuery("#post_text");
            var caretPos = $txt[0].selectionStart;
            var textAreaTxt = $txt.val();

            $txt.html(textAreaTxt.substring(0, caretPos) + x + textAreaTxt.substring(caretPos) );

            $('.tag_results').html("");

            return false;
          });

          }
$(document).on('click', '.displayTag a', function() {
    var href = $(this).attr('href');
    //other code applying href to new anchor tag in proper format
});