从父数据属性值中选择子元素

时间:2017-05-19 08:56:59

标签: javascript jquery jquery-selectors

我有这种html块:

<div data-target="TargeID" data-action="toggle" data-trigger="Yes">
    ...

    <ul>
        <li>
            <label class="radio">
            <input id="cpMainContent_ctl24_rptAnswers_rbAnswer_0" type="radio" name="cpMainContent_ctl24" value="ctl00$cpMainContent$ctl24$rptAnswers$ctl01$rbAnswer">
            Yes             
            </label>
        </li>

        <li>
            <label class="radio">
            <input id="cpMainContent_ctl24_rptAnswers_rbAnswer_1" type="radio" name="cpMainContent_ctl24" value="ctl00$cpMainContent$ctl24$rptAnswers$ctl02$rbAnswer">
            No              
            </label>
        </li>

        <li>
            <label class="radio">
            <input id="cpMainContent_ctl24_rptAnswers_rbAnswer_2" type="radio" name="cpMainContent_ctl24" value="ctl00$cpMainContent$ctl24$rptAnswers$ctl03$rbAnswer">
            maybe               
            </label>
        </li>
    </ul>
</div>

我需要使用data-action="toggle"

选择元素内的每个输入

我正在使用这个jQuery选择器:$('[data-action="toggleQuestions"] :input');

但我需要选择那些text值等于父data-trigger值的输入。

是否可以直接使用选择器?

2 个答案:

答案 0 :(得分:3)

逻辑太复杂,无法放入单个选择器。相反,您可以使用filter()查找:input元素,然后将其父text()的{​​{1}}与容器上的label值相匹配。试试这个:

&#13;
&#13;
data-trigger
&#13;
var $container = $('[data-action="toggle"]');
var $input = $container.find(':input').filter(function() {
  return $(this).closest('label').text().trim() == $container.data('trigger');
})

$input.prop('checked', true);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用以下代码

$('[data-action="toggle"]').each(function() {
    var triggerValue = $(this).attr("data-trigger");

    $(this).find('input[type=radio]').each(function() {
        if ($(this).parent().text().trim() === triggerValue) {
            $(this).prop("checked", true);
        }
    });
});