D3和jQuery有什么区别?

参考这个例子:

http://vallandingham.me/stepper_steps.html

似乎D3和jQuery库非常相似,它们都以对象链方式进行DOM操作。

我很好奇,知道D3比jQuery更容易做什么,反之亦然。 有许多使用jQuery作为基础的graphics和可视化库(例如, highcharts , flot , wijmo )。

请给出具体的例子,说明他们是如何不同的。

  • D3是数据驱动的,但jQuery不是:用jQuery 直接操作元素,但是D3通过D3独特的data()enter()exit()方法提供数据和callback ,D3操作元素。

  • D3通常用于数据可视化,但jQuery用于创buildWeb应用程序。 D3有很多数据可视化扩展,jQuery有许多Web应用程序插件。

  • 两者都是JavaScript DOM操作库,具有CSSselect器和stream畅的API,并且基于Web标准,使它们看起来相似。

下面的代码是D3用法的一个例子,这是不可能与jQuery(尝试在jsfiddle中 ):

  // create selection var selection = d3.select('body').selectAll('div'); // create binding between selection and data var binding = selection.data([50, 100, 150]); // update existing nodes binding .style('width', function(d) { return d + 'px'; }); // create nodes for new data binding.enter() .append('div') .style('width', function(d) { return d + 'px'; }); // remove nodes for discarded data binding.exit() .remove(); 

D3有一个愚蠢的描述。 jQuery和d3并不完全相同,你只是不要把它们用于相同的事情。

jQuery的目的是做一般的dom操作。 这是一个通用的JavaScript工具包,你可能想要做的任何事情。

d3的主要目的是使数据有光泽的graphics很容易。 如果要制作数据的graphics化可视化,您应该一定要使用它(或类似的东西,或者其他类似的东西)。

如果你想要一个通用的JS库来满足你所有的交互式表单需求,可以考虑使用jQuery或proto或mootools。 如果你想要的东西很小,可以考虑underscore.js。 如果你想要dependency injection和可testing性,请考虑AngularJS。

维基百科的一般比较指南。

我明白为什么有人会认为他们是相似的。 他们使用类似的select器语法 – $('SELECTOR'),而d3是一个非常强大的工具,用于select,过滤和操作html元素,尤其是在将这些操作链接在一起时。 D3试图在自己的主页上向您解释这是一个通用库,但事实是,大多数人使用它时,他们想要制作图表 。 将它用于平均dom操作是非常不寻常的,因为d3学习曲线非常陡峭。 然而,这是一个比jQuery更普遍的工具,通常人们在d3之上build立其他更具体的库(比如nvd3),而不是直接使用它。

// @ JohnS的回答也很好。 Fluent API =方法链接。 我也同意插件和扩展在库的引导。

我近来一直在使用这两种方法。 由于D3使用Sizzle的select器,你几乎可以混合select器。

请记住,d3.select('#mydiv')不会像jQuery('#mydiv')那样返回。 它是相同的DOM元素,但它正在用不同的构造函数实例化。 例如,假设您有以下元素:

 <div id="mydiv" rel="awesome div" data-hash="654687867asaj"/> 

我们来抓一些常见的方法:

 > d3.select('#mydiv').attr('rel') ; "awesome div" > jQuery('#mydiv').attr('rel'); "awesome div" 

似乎是合法的。 但是,如果你进一步:

 > d3.select('#mydiv').data(); [undefined] > jQuery('#mydiv').data(); Object {hash: "654687867asaj"} 

d3用于数据可视化,它通过对DOM对象进行过滤并应用转换来实现。

jQuery是用于DOM操作,使许多基本的JS任务更轻松。

如果您希望将数据转换为漂亮的交互式图片,D3非常棒。

如果你想移动,操纵或修改你的网页,jQuery是你的工具。

好问题!

虽然这两个库共享许多相同的function,但在我看来,jQuery和D3之间的最大区别是焦点。

jQuery是一个通用库,重点在于跨浏览器和易于使用。

D3专注于数据(操作和可视化),只支持现代浏览器。 虽然看起来像jQuery,但使用起来要困难得多。

D3不只是关于视觉图。 数据驱动的文档。 当您使用d3时,您将数据绑定到dom节点。 由于SVG,我们可以绘制graphics,但D3更多。 您可以使用D3replace框架,如Backbone,Angular和Ember。

不知道谁投了票,但让我补充一些更清晰。

许多网站从服务器请求数据,通常来自数据库。 当网站收到这些数据时,我们必须对新内容进行页面更新。 许多框架都是这样做的,d3也是这样做的。 所以不是使用svg元素,而是使用html元素。 当你调用重绘的时候,它会很快用新的内容更新页面。 真的很高兴没有像jQuery,主干+插件,angular等额外的开销,你只需要知道d3。 现在D3没有一个路由系统烘焙到它。 但是你总是可以find一个。

另一方面,jquery的唯一目的是编写更less的代码。 这只是一个简短的JavaScript版本,已经在许多浏览器上testing过了。 如果你的网页上没有很多jQuery的话。 这是一个伟大的图书馆使用。 这很简单,并需要为多个浏览器的JavaScript开发苦苦挣扎。

如果你试图以类似D3的方式来实现jquery,它会很慢,因为它不是为这个任务而devise的,同样,d3也不是devise来向服务器发布数据,它的devise只是为了消费和渲染数据。

两者都可以解决创build和操作DOM(无论是HTML还是SVG)的相同目的。 D3提供了一个API,它简化了基于数据生成/操作DOM时常见的任务。 它是通过data()函数对数据绑定的本地支持来实现的。 在jQuery中,您将不得不手动处理数据,并定义如何绑定到数据以生成DOM。 正因为如此,你的代码变得更加程序化,更难于推理和遵循。 使用D3,这是更less的步骤/代码和更多的声明。 D3还提供了一些更高级别的function,有助于在SVG中生成数据可视化。 像range(),domain()和scale()这样的函数可以更容易地将数据绘制在一个图上。 像axis()这样的函数也使绘制图表/graphics中常见的UI元素变得更容易。 还有许多其他更高级别的api库位于D3之上,以帮助更复杂的数据可视化,包括交互行为和animation。