我有几个未知元素(可能是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');
任何建议将不胜感激。
答案 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;
答案 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")
答案 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");