使用 jQuery 从强制布局节点中删除所有 .fixed 类
Remove all .fixed classes from force layout nodes with jQuery
我有这个结构,由d3.js强制布局制作:
<div id="familytreecontentsvg">
<g class="nodes">
<g class="node" transform="translate(625.2095978696435,404.7159479251927)" style="border: 3px solid red;"></g>
<g class="node" transform="translate(549.3595414086468,461.0475336079573)" style="border: 3px solid red;"></g>
<g class="node fixed" transform="translate(617.2898371986196,498.8572888164544)" style="border: 3px solid red;"></g>
</g>
最后我想从所有节点中删除 .fixed classes。
所以触发这个事件我有一个按钮。为了检查它是否有效,我只是为了演示添加了一些有效的 css。不知何故,删除 class 不起作用。固定的class没有去掉:
$("#familytreeUnfixallbutton").click(function() {
$( "#familytreecontentsvg .node" ).css( "border", "3px solid red" );
$( "#familytreecontentsvg .node" ).removeClass( "fixed" );
});
那么我如何从节点中删除所有固定的 classes?
当前状态
这个正在运行:
d3.select('#familytreeUnfixallbutton').on('click', function(){
d3.selectAll('#familytreecontentsvg .node').classed('fixed', false)
});
它删除了 固定的 class。但不知何故 d3 对此不感兴趣。还是固定的=(
剩余问题
我为剩下的问题创建了一个新问题:
jQuery addClass/removeClass/toggleClass 似乎不适用于 SVG 元素。 jQuery 上有一个 ticket,但它已关闭并且“不会修复”。
您可以使用 d3.selectAll('#familytreecontentsvg.node').classed('fixed', false)
或旧的 jQuery.attr。所以你的代码应该是这样的:
$("#familytreeUnfixallbutton").click(function() {
$( "#familytreecontentsvg .node" ).css( "border", "3px solid red" );
d3.selectAll('#familytreecontentsvg.node').classed('fixed', false)
});
希望对您有所帮助。
'skay' 说的是正确的,只要确保您 select 说的是正确的,否则它不会起作用。
在我看来,我会给节点 ID 和 select 它们的 ID,然后删除你想要的 class。
nodes.attr("id", function(d,i){ return "nodes" + i;}); //unique ID
//or
nodes.attr("id", "nodes"); //same ID
//selecting using the second way of adding ID
d3.select("#nodes").classed("fixed", false); //remove fixed class
如果你想添加一个class,就这么简单:
d3.select("#nodes").classed("fixed", true); //add fixed class
请使用下面的代码
$("#familytreeUnfixallbutton").click(function() {
$( "#familytreecontentsvg .node" ).each(function(){
$(this).removeClass("fixed");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="familytreecontentsvg">
<g class="nodes">
<g class="node" transform="translate(625.2095978696435,404.7159479251927)" style="border: 3px solid red;"></g>
<g class="node" transform="translate(549.3595414086468,461.0475336079573)" style="border: 3px solid red;"></g>
<g class="node fixed" transform="translate(617.2898371986196,498.8572888164544)" style="border: 3px solid red;"></g>
</g>
<input id="familytreeUnfixallbutton" value="Test Button" type="button" style="float:right; margin-right:100px;" Text="Test Button" />
我有这个结构,由d3.js强制布局制作:
<div id="familytreecontentsvg">
<g class="nodes">
<g class="node" transform="translate(625.2095978696435,404.7159479251927)" style="border: 3px solid red;"></g>
<g class="node" transform="translate(549.3595414086468,461.0475336079573)" style="border: 3px solid red;"></g>
<g class="node fixed" transform="translate(617.2898371986196,498.8572888164544)" style="border: 3px solid red;"></g>
</g>
最后我想从所有节点中删除 .fixed classes。
所以触发这个事件我有一个按钮。为了检查它是否有效,我只是为了演示添加了一些有效的 css。不知何故,删除 class 不起作用。固定的class没有去掉:
$("#familytreeUnfixallbutton").click(function() {
$( "#familytreecontentsvg .node" ).css( "border", "3px solid red" );
$( "#familytreecontentsvg .node" ).removeClass( "fixed" );
});
那么我如何从节点中删除所有固定的 classes?
当前状态
这个正在运行:
d3.select('#familytreeUnfixallbutton').on('click', function(){
d3.selectAll('#familytreecontentsvg .node').classed('fixed', false)
});
它删除了 固定的 class。但不知何故 d3 对此不感兴趣。还是固定的=(
剩余问题
我为剩下的问题创建了一个新问题:
jQuery addClass/removeClass/toggleClass 似乎不适用于 SVG 元素。 jQuery 上有一个 ticket,但它已关闭并且“不会修复”。
您可以使用 d3.selectAll('#familytreecontentsvg.node').classed('fixed', false)
或旧的 jQuery.attr。所以你的代码应该是这样的:
$("#familytreeUnfixallbutton").click(function() {
$( "#familytreecontentsvg .node" ).css( "border", "3px solid red" );
d3.selectAll('#familytreecontentsvg.node').classed('fixed', false)
});
希望对您有所帮助。
'skay' 说的是正确的,只要确保您 select 说的是正确的,否则它不会起作用。 在我看来,我会给节点 ID 和 select 它们的 ID,然后删除你想要的 class。
nodes.attr("id", function(d,i){ return "nodes" + i;}); //unique ID
//or
nodes.attr("id", "nodes"); //same ID
//selecting using the second way of adding ID
d3.select("#nodes").classed("fixed", false); //remove fixed class
如果你想添加一个class,就这么简单:
d3.select("#nodes").classed("fixed", true); //add fixed class
请使用下面的代码
$("#familytreeUnfixallbutton").click(function() {
$( "#familytreecontentsvg .node" ).each(function(){
$(this).removeClass("fixed");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="familytreecontentsvg">
<g class="nodes">
<g class="node" transform="translate(625.2095978696435,404.7159479251927)" style="border: 3px solid red;"></g>
<g class="node" transform="translate(549.3595414086468,461.0475336079573)" style="border: 3px solid red;"></g>
<g class="node fixed" transform="translate(617.2898371986196,498.8572888164544)" style="border: 3px solid red;"></g>
</g>
<input id="familytreeUnfixallbutton" value="Test Button" type="button" style="float:right; margin-right:100px;" Text="Test Button" />