jQuery:有选择器过滤器麻烦

时间:2015-11-13 14:07:17

标签: javascript jquery html5

我有一些容器有ids =" container1"," container2"," container3" ... 它们可以包含两种类型的标记之一:表格或画布。 我想根据设备方向隐藏其中一个。 我试过这个

$('[id^=container]:has(canvas)').hide();

$('[id^=container]:has(table)').hide();

但是两者都隐藏了所有容器,不要过滤其内部标签。

4 个答案:

答案 0 :(得分:1)

你可以做到

var x = $('[id^=container]').find("table").length;

// Will be 0 if no table inside it

if(x==0) { .. }
else { .. }

答案 1 :(得分:1)

您可以在容器上使用类而不是ID。这是JSFiddle演示。

  

为了在现代浏览器中获得更好的性能,请使用$(" your-pure-css-selector")。has(selector / DOMElement)。

     

来源:https://api.jquery.com/has-selector/

基本上我做了3个容器。一个有桌子,一个有画布,一个没有。

<div class="container green">
    <table></table>
</div>
<div class="container blue">
    <canvas></canvas>
</div>
<div class="container red"></div>

快速的CSS让div可见。

div.container{
    display: inline-block;
    height: 50px;
    margin: 10px;
    width: 50px;
}

div.green{
    background-color: green;
}

div.blue{ 
    background-color: blue;
}

div.red{
    background-color: red;
}

并完成它,一个在文档准备就绪时执行的jQuery。

$(document).ready(function(){
   $('div.container').has('canvas').hide(); 
});

答案 2 :(得分:1)

如果您知道要抓取容器的元素没有嵌套在其他标记中,则可以使用HTML元素的parentNode属性来爬上DOM树并隐藏父级。

document.querySelector("[id^=container] > table").parentNode.style.display= "none";

演示概念的示例:

document.getElementById("input").addEventListener("change", function() {
  document.getElementById("container1").style.display = "block";
  document.getElementById("container2").style.display = "block";
  document.querySelector("[id^=container] > " + this.value).parentNode.style.display = "none";
});
#container1 {
  border: 1px solid red;
}
#container2 {
  border: 1px solid blue;
}
<select id="input">
  <options>
    <option value="table">Hide the table</option>
    <option value="canvas">Hide the canvas</option>
  </options>
</select>
<div id="container1">Table
  <table></table>
</div>
<div id="container2">Canvas
  <canvas></canvas>
</div>

答案 3 :(得分:0)

我没有意识到我有一个id =“container *”的全局容器。 多么愚蠢的错误。很抱歉偷你的时间,谢谢大家!