Jquery使用带有动态字符串的find()

时间:2012-02-08 23:23:22

标签: jquery

我的问题是如何使用jquery find(),根据我选中的复选框找到正确的列表项?我已经尝试动态地构建字符串,但它不起作用......?!

有更简单的方法吗?

我列出了几个listitems和几个复选框。

 <li class="item" data-id="2" data-type="Bokföringsprogram" operativsystem='Windows' >
 <li class="item" data-id="2" data-type="Bokföringsprogram" operativsystem='Windows' operativsystem='MAC OS' >
 <li class="item" data-id="67" data-type="Faktureringsprogram" operativsystem='Windows'   operativsystem='MAC OS' >

<li><input type="checkbox" name="boxvalidator" value="Windows" />Windows<br /></li>
<li><input type="checkbox" name="boxvalidator" value="MAC OS" />MAC OS<br /></li>
<li><input type="checkbox" name="boxvalidator" value="Ubuntu" />Ubuntu<br /></li>
<li><input type="checkbox" name="boxvalidator" value="Linux" />Linux<br /></li>

Jquery代码

$('input:checkbox[name="boxvalidator"]:checked').each(function() 
{ 
$boxchecked = $boxchecked + ",li[operativsystem=~" + $(this).attr('value') +  "],";
});

var $filteredPortfolio = $portfolioClone.find($boxchecked);

String看起来像这样: undefined,li [operativsystem = ~Windows] ,, li [operativsystem = ~MAC OS],

必须是一种更简单的方法吗?

干杯&amp;感谢您一直在这里阅读!

2 个答案:

答案 0 :(得分:0)

正如sgarrett所说,你的选择器$('input:checkbox [name =“boxvalidator”]:checked')看起来不错。由于您要选择列表项而不是复选框,只需修改此选择器以选择返回复选框的父项:

$。( '输入:复选框[名称= “boxvalidator”]:检查')的父()

答案 1 :(得分:0)

由此:

  

字符串如下所示:undefined,li [operativsystem = ~Windows] ,, li [operativsystem = ~MAC OS],

看起来您可能希望在该功能之外的某个位置设置$boxchecked = ''。或者,您可以执行以下操作以避免使用额外的逗号:

$('input:checkbox[name="boxvalidator"]:checked').each(function() 
{
    if (typeof $boxchecked !== 'undefined') {
        $boxchecked = $boxchecked + ",";
    }
    else {
        $boxchecked = "";
    }
    $boxchecked = $boxchecked + "li[operativsystem=~" + $(this).attr('value') +  "]";
});

话虽这么说,@ veblock的解决方案看起来更像是获得你想要的东西。