【问题标题】:Select all labels EXCEPT those preceding a checkbox or radio input选择除复选框或单选输入之前的所有标签
【发布时间】:2013-11-26 16:33:33
【问题描述】:

鉴于以下表格,我如何选择所有标签,除了那些紧接在复选框或单选输入之前的标签。

<form>
<label>Select This Label</label><input type="text" />
<label>Select This Label</label><input type="email" />
<label>Select This Label Main checkbox group</label><br>
<label>NOT THIS LABEL!</label><input type="checkbox" />
<label>NOT THIS LABEL!</label><input type="radio" />
<label>Select this arbitrary label just hanging out here</label>
</form>

目标:我正在尝试为除标签 4 和 5 之外的所有标签添加一个类。

编辑:我尝试过的选择器在不同的地方使用 + 和 :not() 运算符。所以

$( form label +:not(input[type=radio],input[type=checkbox]) ~ label) 

$( form label:not(+input[type=radio],+input[type=checkbox]) ~ label) 

等等。

编辑 2* 我需要在选择器中完全执行此操作。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    试试:

    $("form").find("label").each(function(){
        if(!($(this).next().is("input[type='radio']") || ($(this).next().is("input[type='checkbox']")))){
            $(this).addClass("someclass");
        }
    });
    

    Fiddle here.

    【讨论】:

    • 我需要在选择器中完全执行此操作。
    • “我需要在选择器中完全执行此操作。”为什么?
    • 经典的家长回答“因为我这么说”就足够了吗?
    【解决方案2】:

    我认为仅仅使用选择器是不可能的

    $('label').filter(function(){
        return !$(this).next().is('[type="radio"], [type="checkbox"]')
    })
    

    演示:Fiddle

    【讨论】:

    • 我需要在选择器中完全做到这一点。
    • @GeoffreyOchsner *.com/questions/10006282/…
    • 标记为解决方案,因为它似乎不可能。