使用jQuery,如何在元素上或元素内查找数据属性? (树遍历)

时间:2013-12-05 22:59:44

标签: javascript jquery html dom

我有几个未知元素(可能是span,input,select,div,等等):

<div id="SomeControl" >  <-- Data Attribute could be here
  <span>  <-- or Data Attribute could be here or even lower in the DOM
    ...  somewhere here is a data attribute: data-is-dirty="True"
   </span>
</div>

...

var $myControl = $('#SomeControl'); 

使用$ myControl可以找到给定数据属性的存在和/或值吗?

我试过了:

 var isDirty = $myControl.find(':has([data-is-dirty]').data('is-dirty');

任何建议将不胜感激。

4 个答案:

答案 0 :(得分:3)

我可以考虑在不将其包装在另一个元素中的情况下进行操作。不是任何人的粉丝,也许它会激励他人。

var horrible1 = $("#test").find("*").andSelf().filter("[data-is-dirty]").length;

var horrible2 = $("#test").find("[data-is-dirty]").andSelf().filter("[data-is-dirty]").length;


var elem = $("#test");
var horrible3 = elem.parent().find("#" + elem.attr("id") + "[data-is-dirty], #" + elem.attr("id") + " [data-is-dirty]").length;

var elem = $("#test");
var horrible4 = elem.find("[data-is-dirty]").add(elem.filter("[data-is-dirty]")).length;

var horrible5 = $("[data-is-dirty]").filter( "#test, #test *" ).length;

JSFiddle

答案 1 :(得分:2)

var isDirty = $myControl.find('[data-is-dirty]');

小提琴:http://jsfiddle.net/UpGQX/1/礼貌:胡言乱语

选择$myControl本身(如果脏):

var isDirty = $myControl.find('[data-is-dirty]');
var myControlIsDirty = $myControl.attr('data-is-dirty');
if (typeof myControlIsDirty !== 'undefined' && myControlIsDirty !== false) {
   isDirty.push($myControl);
}

或者甚至更好:

var isDirty = $myControl.parent().find('[data-is-dirty]');

答案 2 :(得分:0)

$( "[data='data-is-dirty']" ),如果您要排除父div,请使用.not("#SomeControl")

试试这个http://fiddle.jshell.net/HHaT9/

答案 3 :(得分:0)

var isDirty=$("#SomeControl[data-is-dirty],#SomeControl [data-is-dirty]").data('is-dirty');

[编辑]同样的想法,如果你不知道元素id:

var isDirty=$someControl.data("is-dirty")||$("[data-is-dirty]",$someControl).data("is-dirty");