【问题标题】:jQuery selector wildcard-mapping unknown variablejQuery选择器通配符映射未知变量
【发布时间】:2012-09-30 12:52:20
【问题描述】:

HTML

<select id="edit-attributes-1"></select>
<select id="edit-attributes-2"></select>
<select id="edit-attributes-3"></select>
<select id="edit-attributes-4"></select>

这是由 cms 生成的,我无能为力

JQUERY:

 $('select[id^="edit-attributes-"][id!="edit-attributes-12"]').after('<span class="step stepdown step-'+$(this).attr('id')+'">+</span>');  

所以我创建了这个,因为尝试 jquery.ui.spinner 在识别元素方面存在问题。

注意:

$(this).attr('id') here results as unknown.

结果

<select id="edit-attributes-1"></select>
   <span class="step stepdown step-**unknown**">+</span>
<select id="edit-attributes-2"></select>
   <span class="step stepdown step-**unknown**">+</span>
<select id="edit-attributes-3"></select>
   <span class="step stepdown step-**unknown**">+</span>
<select id="edit-attributes-4"></select>
   <span class="step stepdown step-**unknown**">+</span>

如您所见,$(this).attr('id') 的部分是未知的。

期望的结果

<select id="edit-attributes-1"></select>
   <span class="step stepdown step-**edit-attributes-1**">+</span>
<select id="edit-attributes-2"></select>
   <span class="step stepdown step-**edit-attributes-2**">+</span>
<select id="edit-attributes-3"></select>
   <span class="step stepdown step-**edit-attributes-3**">+</span>
<select id="edit-attributes-4"></select>
   <span class="step stepdown step-**edit-attributes-4**">+</span>

我不知道我怎样才能实现这种概念,或者请提出一种简化事情的最佳方法。

【问题讨论】:

  • 使用这个必须有一个上下文。你在哪里称呼这个??
  • 也最好使用 $('select[id^="edit-attributes-"]').not('[id="edit-attributes-12"]') 因为它更快比 $('select[id^="edit-attributes-"][id!="edit-attributes-12"]')

标签: jquery selector wildcard-mapping


【解决方案1】:

您的代码中的this 没有引用您选择的元素,您可以使用after 的函数:

$('select[id^="edit-attributes-"][id!="edit-attributes-12"]').after(function(ind){
   return '<span class="step stepdown step-'+ this.id +'">+</span>'
}); 

http://jsfiddle.net/qjVHM/

【讨论】:

  • 在 jsfiddle 中没有函数(ind),但在这里你有它。
  • 这是 jQuery 集合中选定元素的index可选
【解决方案2】:

试试这个代码:

 $('select[id^="edit-attributes-"][id!="edit-attributes-12"]').each(function () {
    var this_selection = $(this);
    var selection_id = this_selection.attr('id');
    this_selection.after('<span class="step stepdown step-' + selection_id + '"></span>');  
 });

【讨论】:

  • 谢谢布赖恩,你的代码更具可读性,所以我正在寻找一个更短的代码,但我不太确定哪一个是最好的,
  • 我试图让我的代码尽可能地具有可读性,但我只是向您展示了其中的思考过程。从性能的角度来看,Short 更好。我只是想确保你知道发生了什么。
猜你喜欢
  • 2011-07-19
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
相关资源
最近更新 更多