【问题标题】:jquery re ordering <li> according to url parametersjquery根据url参数重新排序<li>
【发布时间】:2012-04-07 08:09:22
【问题描述】:

我想根据 URL 中的参数重新排序我的项目列表。

这是我的清单:

<ul>
   <li><a href='page.php?paramValue=1'>iten1</a></li>
   <li><a href='page.php?paramValue=2'>iten2</a></li>
   <li><a href='page.php?paramValue=3'>iten3</a></li>
   <li><a href='page.php?paramValue=4'>iten4</a></li>

如果例如 url 其:mydomain.com/page.php?paramValue=3 列表会重新排序并且第 3 个 li 应该成为列表中的第一个,当页面加载时(当任何一个iten被点击时,页面加载agian),像这样:

<ul>
       <li><a href='page.php?paramValue=3'>iten3</a></li>
       <li><a href='page.php?paramValue=1'>iten1</a></li>
       <li><a href='page.php?paramValue=2'>iten2</a></li>           
       <li><a href='page.php?paramValue=4'>iten4</a></li>
   </ul>

有什么建议吗??

【问题讨论】:

  • 到目前为止你提供了什么代码? ul有id吗?它是页面上唯一的 ul 吗?
  • 目前我有代码可以读取 URL 并拆分字符串。不,它不是页面中唯一的 ul。我可以给它一个ID
  • This frequently-asked question 有一些从查询字符串中获取变量值的好方法。
  • tip 将通过 PHP、jQuery 或 JavaScript 来实现。

标签: jquery url reorderlist


【解决方案1】:

试试下面的代码。尚未测试,但应该可以工作。

var ulElement = $("ul"); // this may change if you want a specific ul element.
var linkElems = window.location.href.replace(/.*\?/,"").split('&');
var paramValueStr = "";
for (var i=0; i < linkElems.length; i++) {
    if (linkElems[i].indexOf("paramValue") == 0) {
        paramValueStr  = linkElems[i];
    }
}
if (paramValueStr == "") {
    return;
}

var elemToRemove = ulElement.find('a [href*="' + paramValueStr + '"]').parent();
elemToRemove.remove(); // remove from original place
elemToRemove.prependTo(ulElement); // insert into beginning of ul

【讨论】:

  • 只是说它很复杂是一个模糊的论点,这意味着你没有通过答案。当您提供反馈时,您应该注意更加具体。
  • 老兄。复杂意味着你在 13 行中做了我在 1 行中所做的事情。
  • “OP 评论说他已经有了从查询字符串中获取变量值的代码。即使他没有,that particular question is already well-answered。” - @mblase75
【解决方案2】:

试试:

下面的代码寻找一个以3 结尾的href 抓取父级 (li) 并将其添加到 ul 前面。

$('a[href$="3"]').parent().prependTo('ul');

根据需要添加更严格的选择器。

http://jsfiddle.net/iambriansreed/DDAvY/2/

更新:

以下内容更准确一些。下面的代码查找 包含 paramValue=3href

$('a[href*="paramValue=3"]').parent().prependTo('ul');

http://jsfiddle.net/iambriansreed/DDAvY/4/

【讨论】:

  • 究竟是如何从页面 URL 中获取值的?
  • @AndrewWillis "查找以 3 结尾的 href..."
  • 那么你从哪里得到'3'?它需要来自页面 URL
  • @AndrewWillis 阅读更新后的答案。查看jQuery attribute selectors。全部 - 报复性的反对票很臭。
  • Still 3 是硬编码的。它应该通过一个变量来引用,其中值由另一个代码提取。
【解决方案3】:

假设它们总是相同的,你可以使用 string.split() 来获取值后面的数字:

href = $(a).attr('href');
href.split()
//href is now an array[page.php?paramValue, number];
//you can use href[1] to sort the elements.

如果您想继续使用 JQUery,可以使用专门为此构建的插件:

http://james.padolsey.com/javascript/sorting-elements-with-jquery/

如果您使用该插件,您的代码将如下所示:

$('li').sortElements(function(a, b){
    aHref = $(a).attr('href');
    bHref = $(b).attr('href');
    aHref = aHref.split();
    bHref = bHref.split();
    return aHref[1] > bHref[1] ? 1 : -1;
});

诚然,这可能会变得更漂亮,但它应该可以工作

【讨论】:

  • 我不知道,SA 的用户协议的一部分是否是最狡猾的?附带说明一下,感谢您有机会了解 prepend 实际上会删除一个节点来添加它。这可能对我有用。
  • @iambriansreed。你的解决方案会奏效吗?你能发布一个你的解决方案如何工作的示例吗?
  • 我的答案是指向小提琴的链接...@ChrisSobolewski ;)
【解决方案4】:

试试这个:

javascript:

elementID = /[0-9]+/.exec(/paramValue=[0-9]+/.exec(location.search));
$('li:nth-child('+elementID+')', 'ul#ulID').prependTo('ul#ulID');

你也可以这样做:

elementID = /[0-9]+/.exec(/paramValue=[0-9]+/.exec(location.search));
$('ul#ulID').prepend($('li:nth-child('+elementID+')', 'ul#ulID')

【讨论】:

  • 我刚刚改变了查找elementID的方式,因为我遇到了一点大错误!
  • 如果有多个参数,它会起作用吗?请注意,此 url 只是一个示例,稍后可以在 url 中添加另一个参数,然后代码将中断。
  • 您的意思是多个 paramValue 值吗?如果 URL 是 ?paramValue=3&otherthing=45,它仍然可以工作,因为它只搜索 'paramValue=[0-9]+' 字符串,返回该字符串,然后从中获取数字。
  • 有趣的方法,我喜欢它。此外,您假设 elementId 将位于 elementId 索引处,这是一种非常具体且更好的方法是搜索与其匹配的元素。
  • 是的,我明白你的意思,但是如果列表最初是按顺序排列的,那么 elementID 也应该是索引。
猜你喜欢
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 2020-06-17
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多