0

jQuery选择器:

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

两者都返回:(类不同,但for="*"其余相同)

<label for=​"design" class=​"displayHidden formElems">​Design​&lt;/label>​ 
<label for=​"expertise" class=​"displayHidden formElems">​Expertise​&lt;/label>​
<label for=​"skills" class=​"displayHidden formElems">​Skills​&lt;/label>​
<label for=​"tools" class=​"displayHidden formElems">​Tools​&lt;/label>​
<label for=​"projects" class=​"displayHidden formElems">​Projects​&lt;/label>​
<label for=​"community" class=​"displayHidden formElems">​Community​&lt;/label>​
<label for=​"interests" class=​"displayHidden formElems">​Interests​&lt;/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"]')),但通过动态进行。这个想法是我第一次尝试重构,并且有很多元素,当我点击一个元素时,我想找到它自己,另一个共享它的label for字符串。

我试过了:

$('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'); 
}

虽然不太确定如何编写*or for each,但我会到达那里。非常感谢您的帮助。

4

1 回答 1

1

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

此外,像这样将属性等于选择器附加到您的原始选择器语句是非常好的(我没有完整的 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 选择器而不是for='*'

$('label[for]').click( /* ... */ );
于 2012-07-15T23:47:29.203 回答