我想在循环中使用javascript / jquery设置div的值/文本,但我不知道如何实现它。我需要帮助这个人。
目的:
我在a_link
表中有links
列,其中包含ff。值:
- www.google.com
- https://www.google.com
- www.stackoverflow.com
这是我的代码:
<?php
$querylink = "SELECT * from links";
$resultlink = mysql_query($querylink);
while ($rowlink = mysql_fetch_array($resultlink))
{
$thelink = $rowlink['a_link'];
?>
<div class = "row">
<span id = "linkhere"></span>
</div>
<script>
var link = "<?php echo $thelink; ?>";
$("#linkhere").html(urlify(link));
function urlify(text) {
var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
//var urlRegex = /(https?:\/\/[^\s]+)/g;
return text.replace(urlRegex, function(url,b,c) {
var url2 = (c == 'www.') ? 'http://' +url : url;
// return '<span style = "color:blue;text-decoration:underline">' + url + '</span>';
return '<a href="' +url2+ '" target="_blank">' + url + '</a>';
})
}
</script>
<?php
}
?>
任何帮助都将受到高度赞赏。感谢。
答案 0 :(得分:2)
这不是它的工作方式,这不是其中的任何方法
现在让我们假设您确实需要使用Javascript来处理生成的链接(不是)。
首先需要将您的Javascript代码与PHP代码分开。只有在获取数据并生成一些输出后,才会使用Javascript。
我想你只是想要某种工作代码
<?php
$querylink = "SELECT * from links";
$resultlink = mysql_query($querylink);
while ($rowlink = mysql_fetch_array($resultlink)) :
$link = $rowlink['a_link'];
?>
<div class="row">
<a href="" data-url="<?php echo $link ?>"></a>
</div>
<?php
endwhile;
?>
<script type="text/javascript">
$(function() {
$('.row a').each(function() {
var urlified = urlify($(this).data('url'));
$(this).attr('href', urlified.url)
.text(urlified.label);
});
});
function urlify(text) {
var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
return text.replace(urlRegex, function(url,b,c) {
var label = (c == 'www.') ? 'http://' +url : url;
return {url: url, label: label};
});
}
</script>
答案 1 :(得分:2)
@aimme在技术上没有错误使用不同的数据库库。请阅读&#34; Why shouldn't I use mysql_* functions in PHP?&#34;为什么不使用mysql_以及一些简洁的替代方案,一些教程和一些好的读取。 (是的,所有人都在同一页面!只需向下滚动)
我认为您正在尝试:
<div>
班级&#39;行&#39;
<a>
标记的只需PHP和HTML
<?php
$querylink = "SELECT * from links";
$resultlink = mysql_query($querylink);
while ($rowlink = mysql_fetch_array($resultlink))
{
$theLink= $rowlink['a_link'];
$regexMatches = array();
// removed (what seemed to be) needless groups in regex
$urlFound = preg_match("@((https?:\/\/|www\.)[^\s]+)@",$theLink,$regexMatches);
if($urlFound === 1) {
// only add http:// if http:// was not detected
$href = ($regexMatches[2] === "www." ? "http://" : "") . $theLink;
?>
<div class="row">
<a href="<?php echo $href; ?>" target="_blank"><?php echo $theLink; ?></a>
</div>
<?php }
}
?>
如果a_link不包含&#39; http://&#39;该代码不会回显一行。或者&#39; www。&#39;在里面。所以google.com将不会显示。
值得注意的是,正如所写,正则表达式将在&#34; urls&#34;喜欢&#39; applewww.google.com&#39;。不知道这是否重要。添加&#39; ^&#39;到正则表达式的开头可以解决问题(如:preg_match("@^((https?:\/\/|www\.)[^\s]+)@",$theLink,$regexMatches);
)
(更好的)不同的解决方案可以使用parse_url($url)
<?php
$querylink = "SELECT * from links";
$resultlink = mysql_query($querylink);
while ($rowlink = mysql_fetch_array($resultlink))
{
$theLink= $rowlink['a_link'];
$href = (parse_url($theLink,PHP_URL_SCHEME) === NULL ? "http://" : "") . $theLink;
?>
<div class="row">
<a href="<?php echo $href; ?>" target="_blank"><?php echo $theLink; ?></a>
</div>
<?php
}
?>
然而,使用parse_url()意味着将显示任何旧字符串(而第一个解决方案不会显示任何没有http://或www。的链接)但是因为你从表中提取叫做链接&#39;假设一切都是有效的道路,可能是安全的。
答案 2 :(得分:0)
首先,我想建议使用PDO或mysqli而不是mysql。就这样 容易受到sql注入和折旧。
“我想在循环中使用javascript / jquery设置div的值/文本,但我不知道如何实现它。我需要帮助这个人。”
因为我会说Php是服务器端语言而javascript是客户端语言。而Ajax是从服务器操纵客户端的方式,反之亦然,无需刷新整个页面。
下面只是一个演示,我从你的代码编辑了一点,以显示服务器端和客户端代码的分离,并只是想知道它是如何工作的。我不知道代码是否有效。尚未测试过。 php代码(服务器端)将首先执行,但可以使用document.ready()
或window.load()
内的javascript(客户端)功能来控制它的显示,以尽快应用影响。通过这个我们可以带来在将其显示给客户端之前更改我们想要的链接。对于检索和显示的每个链接,您可以使用特定的类和jquery .each()
函数将某些修复应用于上面提到的Lyes BEN所选链接,或者可以将具有特定类的所有元素都操作为一整个不使用.each。
<?php
$querylink = "SELECT * from links";
$resultlink = mysql_query($querylink);
while ($rowlink = mysql_fetch_array($resultlink))
{
$thelink = $rowlink['a_link'];
echo '<div class = "row">
<span id = "linkhere">
<a href="'.$thelink.'"></a>
</span>
</div>';
}
?>
<script>
$("#linkhere a").html(urlify(link));
function urlify(text) {
var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
//var urlRegex = /(https?:\/\/[^\s]+)/g;
return text.replace(urlRegex, function(url,b,c) {
var url2 = (c == 'www.') ? 'http://' +url : url;
// return '<span style = "color:blue;text-decoration:underline">' + url + '</span>';
return '<a href="' +url2+ '" target="_blank">' + url + '</a>';
})
}
</script>
答案 3 :(得分:0)
你可以使用php和parse_url函数(http://php.net/manual/en/function.parse-url.php)来实现它,以获得不同的组件。
在parse_url中,有http或https的'scheme'键。
然后用php做这个,只需调用formatUrl函数来制作url
<?php
function formatUrl($url)
{
$urlData = parse_url($url);
if(!isset($urlData['scheme'])) {
$url = 'http://' . $url;
}
return '<a href="' . $url . '" target="_blank">' . $url . '</a>';
}
?>
<?php
$querylink = "SELECT * from links";
$resultlink = mysql_query($querylink);
while ($rowlink = mysql_fetch_array($resultlink))
{
$thelink = $rowlink['a_link'];
?>
<div class = "row">
<span id="linkhere"><?php echo formatUrl($thelink)?></span>
</div>
<?php
}
?>