D3和jQuery有什么区别?

zca*_*ate 100 javascript jquery d3.js

参考这个例子:

http://vallandingham.me/stepper_steps.html

似乎D3和jQuery库在它们都以对象链方式进行DOM操作的意义上非常相似.

我很好奇D3知道什么函数比jQuery更容易,反之亦然.有很多图形和可视化库使用jQuery作为基础(例如,,,).

请举例说明它们的不同之处.

Ali*_*iba 90

  • D3是数据驱动的,但jQuery是不是:使用jQuery 你直接操纵的元素,但与D3 你提供的数据和回调至D3独有的data(),enter()exit()方法和D3操纵元素.

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

  • 两者都是JavaScript DOM操作库,具有CSS选择器和流畅的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();
Run Code Online (Sandbox Code Playgroud)

  • 不错,一个例子值超过1000字 (9认同)

Cas*_*ase 59

d3有一个愚蠢的描述.jQuery和d3完全没有相似之处,你只是不要将它们用于同样的事情.

jQuery的目的是做一般的dom操作.它是一个通用的javascript工具包,可用于您可能想要做的任何事情.

d3的主要目的是使用数据轻松制作闪亮的图形.如果要对数据进行图形可视化,您绝对应该使用它(或类似的东西,或者在它之上构建的东西).

如果您想要一个通用的JS库来满足您的所有交互式表单需求,请考虑使用jQuery或proto或mootools.如果你想要一些小东西,请考虑下划线.js.如果您想要具有依赖注入和可测试性的东西,请考虑使用AngularJS.

一个通用的比较,从维基百科指南.

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

@ JohnS的回答也很好.Fluent API =方法链接.我也同意插件和扩展引导您使用库的位置.

  • +1愚蠢的描述.我研究了很多客户端库和组件,但是在完全丢失之前我没有超过他们网站上的第一句话.我点击了"事物"这个花哨的深奥的六角形mozaic,它带我到一个神秘而无关的地方.由于我没有理解这里发生了什么,我认为我不配d3俱乐部.因此,我将减少,并进入西方,并保持d3-less. (5认同)
  • 它们的相似之处在于它们都运行在Sizzle上并使用相同的选择器(每个框架的很大一部分).但是,在选择后,它们构造了非常不同的DOM操作对象. (2认同)

ame*_*iel 13

我最近一直在使用这两种方法.由于d3使用Sizzle的选择器,你几乎可以混淆选择器.

请记住,d3.select('#mydiv')与jQuery('#mydiv')的返回并不完全相同.它是相同的DOM元素,但它是用不同的构造函数实例化的.例如,假设您有以下元素:

<div id="mydiv" rel="awesome div" data-hash="654687867asaj"/>
Run Code Online (Sandbox Code Playgroud)

让我们抓住一些常用的方法:

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

> jQuery('#mydiv').attr('rel');
 "awesome div"
Run Code Online (Sandbox Code Playgroud)

似乎是合法的.但如果你再往前走一点:

> d3.select('#mydiv').data();
 [undefined]

> jQuery('#mydiv').data();
 Object {hash: "654687867asaj"}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的比较.jQuery中的`.data()`基本上是访问html属性`data- <custom-name>`的快捷方式.但是在D3中它与html数据属性无关,它在D3中的作用是返回一个新的选择作为args中传递的数据与已选择元素的连接. (5认同)
  • 现在这是一个糟糕的比较,但截至 2013 年,它并没有那么糟糕。从那以后,jQuery 为旧浏览器放弃了很多 polyfill(数据属性就是其中之一),而 D3 不再是一个单体库,而是成为一个较小的特定库集合的入口点 (3认同)

eig*_*yes 10

d3用于数据可视化,它通过过滤DOM对象和应用转换来实现.

jQuery是为DOM操作而制作的,它使许多基本的JS任务变得更容易.

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

如果您想移动,操纵或以其他方式修改您的网页,jQuery就是您的工具.


jem*_*oii 8

D3不仅仅是视觉图形.数据驱动文档.使用d3时,将数据绑定到dom节点.由于SVG我们能够制作图表,但D3更是如此.您可以使用D3替换Backbone,Angular和Ember等框架.

不确定谁投票,但让我更加清晰.

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

另一方面,Jquery的唯一目的是编写更少的代码.它只是在许多浏览器上测试过的javascript的简写版本.如果你的网页上没有很多jquery.这是一个很棒的图书馆.这很简单,并且为多个浏览器的javascript开发带来了很多痛苦.

如果你试图以类似d3的方式实现jquery,它会很慢,因为它不是为那个任务设计的,同样,d3不是设计用于将数据发布到服务器,它只是为了使用和呈现数据而设计的.

  • 不是天真,我只使用 d3 和 websockets 作为我工作的内部工具。D3 处理从 websockets 检索到的数据的数据绑定。我还使用 d3 来管理一些不同的视图。这是它自己的SPA。D3 可以处理 html 元素以及 svg 元素。你不应该低估程序员。这就是为什么网络对我来说很漂亮,有很多方法可以做同样的事情。选择你最喜欢的方式,它会保持乐趣。 (2认同)

Joh*_*ers 7

好问题!

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

jQuery是一个通用库,专注于跨浏览器和易于使用.

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

  • jquery遵循写入少做多方法,d3专注于将数据呈现给文档元素.有一些原因,为什么d3更难,一个使用原始的javascript,两个,一些原始的javascript被更改.例如:Javascript forEach(value,index,array),在d3 forEach(index,value,array)中.我不确定为什么他们会反转函数参数,就像我在源代码中看到的那样.我认为如果我们修改无意义的功能,我们可以让d3更快. (3认同)