【发布时间】:2013-01-09 23:25:21
【问题描述】:
我正在使用 jQuery 来拯救有限的 CMS 设置。
我需要按字母顺序对有序列表进行排序,但我还需要能够将“特殊”列表项放在列表顶部,并再次仅对那些按其“可选”数值降序的特殊项进行排序。
例如,如果这是我的原始标记:
<ul>
<li class=" ">C</li>
<li class=" ">A</li>
<li class=" ">B</li>
<li class=" ">E</li>
<li class=" ">D</li>
<li class="3">Z</li>
<li class="6">Y</li>
<li class="14">X</li>
</ul>
...我希望 jQuery 对其进行排序,因此这将是生成的 DOM 内容:
<ul>
<li class="14">X</li>
<li class="6">Y</li>
<li class="3">Z</li>
<li class=" ">A</li>
<li class=" ">B</li>
<li class=" ">C</li>
<li class=" ">D</li>
<li class=" ">E</li>
</ul>
如果无法按类值排序或过于复杂,也许我可以改用以下标记结构:
<ul>
<li><span class="numerical">3</span><span class="alphabetical">B</span></li>
</ul>
有谁知道什么 jQuery 代码可以让我这样做?我是否需要运行一系列嵌套的“每个”操作以及以某种方式比较值的“insertAfter”和“insertBefore”函数?我认为有更好的方法,但我不确定从哪里开始我的研究。
我愿意接受任何和所有建议。与此同时,我也会尝试自己解决这个问题,但我仍然是 jQuery 菜鸟,所以我怀疑自己能否找到正确的代码 :)
谢谢!!
【问题讨论】:
-
您可以使用
data-*属性而不是类来表示列表项值吗? -
好问题。我不熟悉 data-* 属性,但是如果运行 jQuery 的浏览器通常不能识别 data-* 属性(IE7/8?),我想知道 jQuery 是否可以访问这些属性的值。我会调查的,谢谢!
-
@JohnKoerner - 已经很接近了,但我还想在最初的 JS 排序之后进行第二次重新排序。一旦字母排序完成,我只想以数字方式重新排序选择的元素。
-
@LearnWebCode caniuse.com/dataset
-
IIRC,类名不能以数字开头。或者至少不在 CSS 类选择器中。
data-*属性在这里似乎更合适,因为这些数字并没有真正“分类”元素。
标签: javascript jquery