2012-03-05 106 views
0

我有一个结构如下,我想将可拖动属性更改为false。 我该如何做到这一点在jQuery中? 谢谢。在jQuery中更改属性

<div id="top1"> 
    <span id="s1" draggable="True">a</span> 
    <span id="s2" draggable="True">b</span> 
</div> 

回答

1
$("#s1").attr("draggable", "False"); 
1

它很容易做到。你会遍历所有的跨度,然后使用‘ATTR’的jQuery的方法来获得‘拖动’属性并将其设置为false

$("span").each(function(){ 
     if($(this).attr("draggable")){ 
      $(this).attr("draggable","false"); 
     } 
    }); 
+0

这会不会加属性跨越不具有'draggable'属性?你不能使用'attr()'一次设置所有选定元素的属性,如:'$(“span”)。attr(“draggable”,“false”);'而不是使用'each '循环? – Anthony 2012-03-05 00:41:12

+0

我已经更新了我的答案,只有当前跨度具有“可拖动”的属性时才会使其为false。 – DG3 2012-03-05 01:06:51

+0

但为什么使用'if'或'each'?你只能指定'draggable'属性的'spans',并通过使用':'(“span [draggable]”)。attr(“draggable”,“false”)来设置它们全部具有相同的值:'只是好奇如果你发现使用每个更有效或更快。 – Anthony 2012-03-05 02:48:30

0

如图jQuery的文档在attributes,你可以设置一个元素的属性使用attr()方法。你的情况:

$("#s2").attr("draggable", "False"); 

如果你想改变所有元素与属性draggable为false,您可以使用attribute selector第一,像这样:

$('[draggable]').attr("draggable", "False"); 

现在,如果你想扭转值,以便当前全部为真,且当前所有虚假都为真,则必须使用attribute equals selector将两个集都存储到其自己的变量中。否则,您将全部切换为false,并且不会将哪些已经为false设置为true。因此,像:

var all_draggable = $('[draggable="True"]'); 
var all_not_draggable = $('[draggable="False"]'); 

all_draggable.attr("draggable", "False"); 
all_not_draggable.attr("draggable", "True"); 
2

如果你想只,TRUE那些被标记虚假所有的

$("span[draggable='True']").attr('draggable', 'False'); 

更改属性跨越

$("span").attr('draggable', 'False'); 
+0

如果true和false是唯一选项,那么这两个选项的作用相同,因为所有跨度都将被设置为false。但是,如果有第三种选择,那么你是对的。 – Anthony 2012-03-05 02:45:02

+0

@Anthony或者其他'span'用于不同的操作,你不能使用第二个代码 – blackpla9ue 2012-03-05 02:57:48

+0

我明白你的想法。我以为你的意思是改变所有跨度可拖动的属性,而所有跨度的可拖动属性都设置为false,这到底是一回事。 – Anthony 2012-03-05 03:04:13