Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从父数据属性值中选择子元素_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

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

Javascript 从父数据属性值中选择子元素,javascript,jquery,jquery-selectors,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"

我有这种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')

但是我需要选择那些
文本
值等于父
数据触发器
值的输入

可以直接使用选择器吗?

使用以下代码

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

逻辑太复杂,无法放在单个选择器中。相反,您可以使用
filter()
查找
:输入
元素,然后将其父
标签的
文本()
与容器上的
数据触发器值相匹配。试试这个:

var$container=$('[data action=“toggle”]');
var$input=$container.find(':input').filter(函数(){
返回$(this).closest('label').text().trim()==$container.data('trigger');
})
$input.prop('checked',true)

  • 大概

为什么需要直接使用选择器?你不能只使用一个
过滤器
调用?@Jamiec我想知道是否有一个更简洁的方法来实现它hanks,这就是我尝试的方法,但我希望有一个选择器语法,比如
$('[data action=“toggleQuestions”]:input:value=[data trigger])
触发器值是
标签的文本。它不是您的代码所使用的收音机的