Php 打印第onclick页上函数的结果?

Php 打印第onclick页上函数的结果?,php,ajax,database,filter,Php,Ajax,Database,Filter,老实说,我甚至不知道最好的方法是什么,但本质上,我在一个包含文件中有一个函数,它接受一个$type参数,然后根据传入的$type从我的数据库中检索/打印结果。。。我想做的是在一个页面上有一系列的链接,当你点击某个链接时,它会运行函数并相应地显示结果 因此,在页面的初始加载中,有一个表可以显示所有内容(我正在大大简化该表…) 项目类型 牛奶 酸奶乳 鸡肉 西葫芦 黄瓜蔬菜 然后,在侧边栏中,我有一系列链接: <a href="#">Dairy</a> <a hre

老实说,我甚至不知道最好的方法是什么,但本质上,我在一个包含文件中有一个函数,它接受一个
$type
参数,然后根据传入的$type从我的数据库中检索/打印结果。。。我想做的是在一个页面上有一系列的链接,当你点击某个链接时,它会运行函数并相应地显示结果

因此,在页面的初始加载中,有一个表可以显示所有内容(我正在大大简化该表…)


项目类型
牛奶
酸奶乳
鸡肉
西葫芦
黄瓜蔬菜
然后,在侧边栏中,我有一系列链接:

<a href="#">Dairy</a>
<a href="#">Meat</a>
<a href="#">Vegetable</a>


我想根据单击的链接过滤初始表(以及来回等),这样,如果用户单击“蔬菜”,我的include文件中的函数将运行并过滤表以仅显示“蔬菜”类型

想到的第一个想法是将class属性添加到标记中,将id attrib添加到标记中,这样您就可以轻松地进行过滤:

<tr class="dairy"><td>Milk</td><td>Dairy</td></tr>
<tr class="meat"><td>Chicken</td><td>Meat</td></tr>

<a href="#" id="dairy">Dairy</a>
<a href="#" id="meat">Meat</a>

这样做的另一个好处是,您可以在不更改代码的情况下对文本进行本地化。

如果您要提前打印整个选项卡,则无需返回服务器,您可以简单地隐藏给定类型的所有行。例如jQuery:

    $('#sidebar a').click(function(){
      // grab the text content of the a tag conver to lowercase
      var type = $(this).text().toLowerCase();

      /* filter all the td's in the table looking for our specified type then hid the 
       * row that they are in
       */
      $('#my_data_table td').contents().filter(function(){
         return this.nodeType == 3 && this.toLowerCase() == type;
      }).parent('tr').hide();

      return false;
    });

实际上,虽然建议abotu在TR中添加一个类会更好,因为如果你出于某种原因不希望看到文本内容,那么对文本内容的过滤可能会变得棘手(因此我将其转换为所有小写字母以帮助你做到这一点)。

好的,我给出了一个正确的答案。你可以按照达雷尔的建议去做。这只是分页功能的扩展,以避免cookies:

$('a').click(function(evt){
    var myId = $(this).attr('id');


    // append a idndicator to the current url
    var location = "" + document.location + "";
    location = location.split('#',1);
    document.location = location + '#' + $(this).attr('id');


    //append to next and previous links
    $('#nextlink').attr({
        'href': $('#nextlink').attr('href') + '#' + $(this).attr('id')
    });
    $('#previouslink').attr({
        'href': $('#previouslink').attr('href') + '#' + $(this).attr('id')
    });

    $('tr').each(function(idx, el){
        if ($(el).hasClass(myId))
        {
            $(el).show();
        }
        else
        {
            $(el).hide();
        }
    });
});
页面加载后执行的某些代码:

var filter = window.location.hash ? '[id=' + window.location.hash.substring(1, window.location.hash.length) + ']' : false;
if(filter)
    $('a').filter(filter).click();
这将模拟/执行具有特定id的链接上的点击页面加载


但一般来说,如果您有一个大型数据库,则应该在后端直接使用SQL对其进行过滤。这将使显示的表格更加一致。例如,如果第1页可能只有3行“dairy”类,第2页可能只有10行“dairy”类。

初始页面加载时是否显示了完整的表格?然后可以使用jQuery筛选表。或者需要再次获取数据,因为数据比最初显示的要多?我喜欢这一点,并考虑过这一点,但这里也有分页功能。。。如果表格为100行,则一次仅显示20行,并带有指向上一页/下一页/第页的链接。。。如果我这样做,分页仍然有效吗,因为我认为不会。不,你是对的。这将破坏分页。但是,您可以将用户只想查看特定类型项目的cookie存储在其中,然后执行$('a')。如果找到该cookie,则在页面刷新时单击()。或者您可以将哈希(例如,#dairy)附加到“next/prev”URL,并在页面加载时使用jQuery计算该值。这样,就不需要cookies了。您可以这样做:“var filter=window.location.hash?”[id='+window.location.hash.substring(1,window.location.hash.length)+']':false;“好的,谢谢Felix,顺便说一句,您的附录。。。现在,我很高兴取消分页,但如果我有更多的时间,我可能会使用您的解决方案:)因此,我的问题基本上得到了回答,但作为旁注(不确定我是否应该为此启动一个全新的线程),但如果单击过滤器后没有找到行,有没有一种方法可以返回“找不到行”的文本?我对答案进行了编辑,使其更加完整,还添加了一条关于表中行数的备注。我确信您可以计算所选的行数($('tr').hasglass(myId)),并在count==0时显示一些包含此文本的div。但我并不是那么熟悉jQuery,我想说的是,你怎么能算数呢;)
$('a').click(function(evt){
    var myId = $(this).attr('id');


    // append a idndicator to the current url
    var location = "" + document.location + "";
    location = location.split('#',1);
    document.location = location + '#' + $(this).attr('id');


    //append to next and previous links
    $('#nextlink').attr({
        'href': $('#nextlink').attr('href') + '#' + $(this).attr('id')
    });
    $('#previouslink').attr({
        'href': $('#previouslink').attr('href') + '#' + $(this).attr('id')
    });

    $('tr').each(function(idx, el){
        if ($(el).hasClass(myId))
        {
            $(el).show();
        }
        else
        {
            $(el).hide();
        }
    });
});
var filter = window.location.hash ? '[id=' + window.location.hash.substring(1, window.location.hash.length) + ']' : false;
if(filter)
    $('a').filter(filter).click();