2012-07-15 192 views
0

jQuery选择:动态属性jQuery选择ATTR( '为= “*”')

//left side 
$('section.abstract label.gcsubheader') 
//right side 
$('fieldset.abstract label.formElems') 

都返回:(与类不同,但for="*"保持相同)

<label for=​"design" class=​"displayHidden formElems">​Design​</label>​ 
<label for=​"expertise" class=​"displayHidden formElems">​Expertise​</label>​ 
<label for=​"skills" class=​"displayHidden formElems">​Skills​</label>​ 
<label for=​"tools" class=​"displayHidden formElems">​Tools​</label>​ 
<label for=​"projects" class=​"displayHidden formElems">​Projects​</label>​ 
<label for=​"community" class=​"displayHidden formElems">​Community​</label>​ 
<label for=​"interests" class=​"displayHidden formElems">​Interests​</label>​ 

我想向左边的选择器添加类似于以下内容的东西:

.find($('label[for="' + $(this).text().toLowerCase() + '"]')) 

var $this = $(this).text().toLowerCase(); //and use the $this in the concatenation: 

完成与labels for="design"一样的选择元素,如选择器($('label[for="design"]')),但通过动态执行。这个想法是,我第一次尝试重构,并且有很多元素,当我点击一个元素时,我想找到它自己,而另一个分享它的字符串。

我曾尝试:

$('section.abstract label.gcsubheader').click(function() { 
    var $this = $(this).text().toLowerCase(); 
    //left element - hide 
    $('section.abstract label.gcsubheader')..find($('label[for="' + $this + '"]')).show(); 
    //Right Side - show 
    $('fieldset.abstract label.formElems').find($('label[for="' + $this + '"]')).show(); 
} 

$('fieldset.abstract label.formElems').find($('label[for="' + $(this).text().toLowerCase() + '"]')).show(); 

不知道我做错了。我是否必须允许另一层抽象来抓取/定义元素的文本,或者是我的语法错误,还是其他的错误?我希望能得到这个,所以后来我可以切换左,右的.hidden类,提供了代码的一个非常强大的重构,也许这样的事情?:

$('label[for="*"]').click(function() { 
    // for each .toggleClass('hidden'); 
} 

虽然不太清楚怎么写*for each或者,但我会到达那里。非常感谢您的帮助。

回答

1

在调用第一个find()之前,您还有一个额外的.,并且将未封闭的字符串文字作为参数传递给它。注意内部函数和click方法的右括号。当您可能想要.hide()时,您还在使用.show()作为左侧元素。

此外,这是完全正常的追加属性等于选择像这样原来的选择语句(我没有完整的HTML,所以选择可能需要进行调整一点点):

$('section.abstract label.gcsubheader').click(function() { 
    var $this = $(this).text().toLowerCase(); 

    //left element - hide 
    $('section.abstract label.gcsubheader[for="' + $this + '"]').hide(); 

    //Right Side - show 
    $('fieldset.abstract label.formElems[for="' + $this + '"]').show(); 
}); 

至于绑定到您的任何标签,请考虑使用has-attribute selector而不是for='*'

$('label[for]').click(/* ... */);