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