簡體   English   中英

使用javascript / jquery-在php LOOP中設置div的值/文本

[英]Set the value/text of a div using javascript/jquery - inside a php LOOP

我想在循環內使用javascript / jquery設置di​​v的值/文本,但我不知道如何實現它。 我需要這個家伙的幫助。

目標:

  1. 從數據庫檢索數據。
  2. 使用javascript / jquery(在循環內)從數據庫中設置元素的值。
  3. 將值鏈接

我在ff links表中有此a_link列。 值:

- 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
    }
?>

任何幫助將不勝感激。 謝謝。

這不是它的工作原理,也不是任何一個工作原理

現在,假設您確實需要使用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>

@aimme從技術上講關於使用其他數據庫庫是沒有錯的。 請閱讀“ 為什么我不應該在PHP中使用mysql_ *函數? ”,以了解為什么不使用mysql_的原因,以及一些簡潔的替代方法,一些教程和一些不錯的讀物。 (是的,全部在同一頁面上!只需向下滾動)

我認為您正在嘗試:

  • 顯示類'row'的<div>
    • 內部帶有<a>標記,該標記將“鏈接”表的“ a_link”列用作href和標簽。
      • 標簽的href必須始終具有方案(http://)。

只是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不包含“ http://”或“ www”,則此代碼不會回顯一行。 在里面。 因此不會顯示google.com。

值得注意的是,如前所述,正則表達式將可在“ url”(如“ applewww.google.com”)上使用。 不知道這是否重要。 在正則表達式的開頭添加“ ^”可以解決問題(例如: 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。的鏈接),但是由於從名為“ links”的表中提取,假設一切都是有效的路徑,也許是安全的。

首先,我想建議使用PDO或mysqli而不是mysql。 因為它容易受到sql注入的影響,並且已貶值。

“我想在循環內使用javascript / jquery來設置div的值/文本,但我不知道如何實現它。我需要這方面的幫助。”

為此,我會說Php是服務器端語言,而javascript是客戶端語言。 Ajax是從服務器反過來從服務器操作客戶端的方法,而無需刷新整個頁面。

下面只是一個示例,我對您的代碼進行了一些編輯,以展示服務器端代碼和客戶端代碼的分離,並給出了其工作原理的信息。我不知道代碼是否有效。 還沒測試 php代碼(服務器端)將首先執行,但可以使用document.ready()window.load() javascript(客戶端)函數控制其顯示,以便盡快應用效果。更改我們需要的鏈接,然后才顯示給客戶。 對於檢索和顯示的每個鏈接,您都可以使用特定的類和jquery .each()函數對選定的鏈接應用特定的修復,因為上述Lyes BEN或具有特定類的所有元素都可以作為一個整體進行操作,而無需使用。每。

<?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>

您可以使用帶有parse_url函數( http://php.net/manual/en/function.parse-url.php )的php實現此功能,以獲取不同的組件。

在parse_url中,有用於http或https的“方案”鍵。

然后使用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
 }
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM