Javascript 使用jQuery从force布局节点中删除所有.fixed类

Javascript 使用jQuery从force布局节点中删除所有.fixed类,javascript,jquery,css,d3.js,force-layout,Javascript,Jquery,Css,D3.js,Force Layout,我有一个结构,由d3.js force布局制作: <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="tr

我有一个结构,由d3.js force布局制作:

<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>
那么,如何从节点中删除所有固定类

现状 这个正在工作:

d3.select('#familytreeUnfixallbutton').on('click', function(){
    d3.selectAll('#familytreecontentsvg .node').classed('fixed', false)
});
它删除固定的类。但不知何故,d3对此并不感兴趣。它仍然是固定的=(

剩余问题
我为剩下的问题创建了一个新问题:

jQuery addClass/removeClass/toggleClass似乎不适用于SVG元素。jQuery上有一个问题,但它已关闭并且“不会修复”

您可以使用
d3.selectAll('#familytreecontentsvg.node').classed('fixed',false)
或good old。因此,您的代码应该如下所示:

$("#familytreeUnfixallbutton").click(function() {
    $( "#familytreecontentsvg .node" ).css( "border", "3px solid red" );
    d3.selectAll('#familytreecontentsvg.node').classed('fixed', false)
});

希望这有帮助。

jQuery addClass/removeClass/toggleClass似乎不适用于SVG元素。jQuery上存在一个错误,但它已关闭,并且“不会修复”

您可以使用
d3.selectAll('#familytreecontentsvg.node').classed('fixed',false)
或good old。因此,您的代码应该如下所示:

$("#familytreeUnfixallbutton").click(function() {
    $( "#familytreecontentsvg .node" ).css( "border", "3px solid red" );
    d3.selectAll('#familytreecontentsvg.node').classed('fixed', false)
});

希望这能有所帮助。

skay所说的是正确的,只要确保你选择了正确的东西,否则它不会起作用。 在我看来,我会给节点ID,然后按ID选择它们,然后删除所需的类

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
如果您希望添加一个类,同样简单:

d3.select("#nodes").classed("fixed", true); //add fixed class

“skay”所说的是正确的,只要确保你选择了正确的东西,否则它就不会起作用。 在我看来,我会给节点ID,然后按ID选择它们,然后删除所需的类

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
如果您希望添加一个类,同样简单:

d3.select("#nodes").classed("fixed", true); //add fixed class

请使用下面的代码

$(“#familytreeUnfixallbutton”)。单击(函数(){
$(“#familytreecontentsvg.node”).each(函数(){
$(此).removeClass(“固定”);
});
});

请使用以下代码

$(“#familytreeUnfixallbutton”)。单击(函数(){
$(“#familytreecontentsvg.node”).each(函数(){
$(此).removeClass(“固定”);
});
});



您是否检查了浏览器控制台上是否有任何错误。我正在处理您的codeJap,没有错误,正如我所说的css编辑工作正常。=/我可以询问您正在使用的jquery库版本吗?您是否检查了浏览器控制台上是否有任何错误。我正在处理您的codeJap,没有错误,正如我所说的css编辑工作正常正确。=/我可以问一下您正在使用的jquery库版本吗?不要更改单击侦听器。我用完整的解决方案编辑了我的答案。JSFIDLE是理想的。您的选择器在该JSFIDLE中是错误的。最后,它应该是
d3.selectAll('#main right.node')
,而不是
d3.selectAll('#main right.node')
。(在
.node
中有一个空格)我已经更新了JSFIDLE:如果您看到,当有一个类被修复时,当您单击按钮时,它会被删除。这是一个不同的问题…您可以接受答案并“问”另一个问题来解决特定的问题。不要更改单击侦听器。我用完整的解决方案编辑了我的答案。JSFIDLE将是理想的。您的选择器是错误的在该jsFiddle.结尾处,它应该是
d3.selectAll('main right.node')
,而不是
d3.selectAll('main right.node')
(在
.node
中有一个空格)我已经更新了JSFIDLE:如果你看到,当有一个类被修复时,当你点击按钮时它就会被删除。这是一个不同的问题…你可以接受答案并“问”另一个问题来解决这个特定的问题。请检查它是否对我有效。我更新了页面加载上的代码,而不是点击按钮,因为我没有点击按钮事件。很抱歉,我在我的办公室中没有JSFIDLE的访问权限。请尝试在按钮上使用apply setTimeout单击另一件事您使用的是什么版本的JQuery?让我们看看。请检查我现在在按钮上更新了代码单击它正在工作。请检查它是否为我工作。我在页面加载上更新了代码,而不是在按钮单击上,因为我没有按钮单击event.对不起,我办公室没有JSFIDLE的访问权限。请尝试在按钮上应用setTimeout单击另一件事您使用的是什么版本的JQuery?让我们检查一下。现在我已经更新了按钮上的代码单击它正在工作。我在这里回答了第二个问题:我在这里回答了第二个问题: