【问题标题】:JQuery dynamically changed 'Attribute Contains' selector doesn't work with varJQuery 动态更改的“属性包含”选择器不适用于 var
【发布时间】:2014-11-05 15:41:57
【问题描述】:

我有一个元素,它的 ID 以“mn”开头,并且是这样创建的“elementSubMenuTitle”类:

$("#mn"+j).append("<p id='mn"+j+"rpt"+i+"' 
class='elementSubMenuTitle'>"+reportList[i].ReportName+"</p>");

如果我使用 $("[id^='mn0']+.elementSubMenuTitle") 的 jquery 选择器,它可以找到我的第一个元素 (mn0rpt0),但是我需要它能够遍历未知数量的这些元素,这些元素遵循 mn0rpt0、mn0rpt1、mn1rpt2 的模式, ETC。 使用

var x = String(0); 
$("[id^=mn"+x+"]+.elementSubMenuTitle").stop(true,true).fadeOut(200); 

努力寻找“mn0..”,但显然我还需要找到“mn1..”和其他人,所以我尝试了:

for(var i = 0; i < catList.length; i++) 
{
var x = String(i);
$("[id^=mn"+x+"]+.elementSubMenuTitle").stop(true,true).fadeOut(200);
}

但这种方法行不通。
那么为什么 String(0) 是一个字符串,而 String(i) 不是呢? (至少这是我的理论)

详细说明: 有遵循命名法的父元素 mn0 mn1 mn2 mn3 .. 这些本身是由循环设置的。

如果是mn0的子元素,则有以mn0开头的子元素,例如mn0rpt0是mn0的子元素,但不是唯一的子元素。我感兴趣的孩子特别有elementSubMenuTitle这个类,也是以mn0开头的。 mn1 和它的孩子也是如此。

循环的目的是为“mnx”的子集设置特定的行为。这种行为会因 x 而异。例如,$(child of mnx) 将需要放置在 $(child of mn(x-1)) 下方 (x*30) 个像素,等等。因此 x 是必要的,因此是循环。

最终,我问为什么var x = String(i) 在插入 $("[id^=mn"+x+"]+.elementSubMenuTitle") 时不起作用,而 var x = String(0) 起作用

【问题讨论】:

  • $("[id^='mn']")不够用吗?
  • @j08691:如果您在其他页面上有&lt;div id="mnemonic"&gt; 怎么办? :) 是的,在这种情况下,该类应添加到 starts-with 选择器 中(并且已明确请求)。如果是单个 ID 匹配,那么该类将被废弃。

标签: jquery string variables dynamic selector


【解决方案1】:

使用attribute starts with 选择器:[attr^=value]

你根本不需要循环:

$("[id^=mn].elementSubMenuTitle").stop(true,true).fadeOut(200);

显然您不再需要将选择器串在一起,因此也不需要+。这从字面上翻译为您对

的要求

以“mn”开头且属于“elementSubMenuTitle”类的 ID

【讨论】:

  • IMO 添加类是无关紧要的,因为 ID 是(或者应该是)唯一的。
  • @j08691:您的意见没有考虑其他以mn开头的id。这不是一个匹配:) 问题很清楚an ID that starts with "mn" and is of class "elementSubMenuTitle"
  • +1 也用于删除选择器中的+。也许你应该解释一下
  • @Brewal:+ 只是用来将围绕其索引值的元素串在一起。正如他们已经知道要做的那样,我假设他们知道做什么,但我会详细说明:)
  • @TrueBlueAussie:此时我不必担心它是否以“mn”开头或包含“mn”,只要它是其中一个即可;我在这里意识到 ^ 和 * 之间的区别。不过,真的,我需要它来“开始”,所以我会使用 ^.感谢您让我知道我需要解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2020-11-07
  • 2016-05-05
  • 2016-10-26
  • 2016-03-25
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多