GVKun编程网logo

利用JavaScript构建树形图的方法详解(js 构建树)

7

此处将为大家介绍关于利用JavaScript构建树形图的方法详解的详细内容,并且为您解答有关js构建树的相关问题,此外,我们还将为您介绍关于JavaScript–三维图库中的树形图、javascrip

此处将为大家介绍关于利用JavaScript构建树形图的方法详解的详细内容,并且为您解答有关js 构建树的相关问题,此外,我们还将为您介绍关于JavaScript – 三维图库中的树形图、javascript 事件处理、鼠标拖动效果实现方法详解_javascript技巧、JavaScript与HTML的结合方法详解_javascript技巧、JavaScript中this关键字使用方法详解_javascript技巧的有用信息。

本文目录一览:

利用JavaScript构建树形图的方法详解(js 构建树)

利用JavaScript构建树形图的方法详解(js 构建树)

树形图可视化广泛用于分层数据分析。如果你没有经验还想创建一个,那将会有些复杂。下面是一个详细教程,教你如何使用JavaScript创建交互式树形图。

宇宙中只有我们吗?我们每个人都曾在某个时候问过自己这个问题。当我们在考虑地球是否是宇宙中唯一可居住的行星时,我们可能会思考宇宙究竟有多大。让我们在树形图的帮助下看看吧!在本教程中,我们将使用树形映射出宇宙中已知的10个最大的星系。

什么是树形图

在进入教程之前,了解一下树形图的概念。树形图是一种流行的技术,用于将分层组织、树状结构的数据可视化。它可以一目了然地展示出层次结构以及各个数据点的值,它使用了大小与相应数量成比例的嵌套矩形。

树的每个分支都是一个矩形,对于子分支,其中嵌套了较小的矩形。通过颜色和接近度显示数据,树形图可以轻松表示大量数据,同时有效利用空间,非常适合比较层次结构中的比例。

树形图类型是由Ben Shneiderman教授发明的,他在信息设计和人机交互领域作出了重大贡献。树形图被用于许多数据可视化领域,可用于分析股票市场、人口普查系统和选举统计数据,以及数据新闻、硬盘探索工具等。

浏览JS树形图

下面将使用JavaScript构建一个树形图来比较已知宇宙中排名前10的星系的大小。JS树状图在本教程结束时的样子:

创建一个基本的JS树形图

创建基于JavaScript的树状图通常需要以下四个基本步骤:

1. 创建一个HTML页面

2. 参考JavaScript文件

3. 设置数据

4. 编写一些JS树代码

如果你是 HTML、CSS 和JavaScript方面的新手,请不要担心。本文将详细介绍每一步,在学习完本教程之后,你可以尝试去做自己的JS树状图。

1. 创建一个HTML页面

首先需要创建一个基本的HTML页面。添加一个HTML块元素 (<div>),并将树形图放置其中,为其分配一个ID属性(让它成为“容器”),以便稍后在代码中引用它。

然后为 <div> 设置一些样式。将宽度和高度属性定义为 100%,边距和填充为 0。当然,你可以根据自己的喜好进行更改。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JavaScript Treemap Chart</title>
    <style type="text/css">   
      html, body, #container {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

2. 参考JavaScript文件

接下来,需要引用所需脚本,用这些脚本创建树形图。

现在有多个JavaScript图表库可供选择。创建交互式数据可视化的基本步骤与它们中的任何一个都是差不多的。在这里,为了说明问题,我将使用AnyChart,它支持树形图并有免费版本,其源代码在GitHub上开放。

因此,要构建树形图,需要导入“核心”和“树形图”模块。在第一步创建的HTML页面的 head 部分中引用它们。从 CDN 获取它们(或下载文件)。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JavaScript Treemap Chart</title>
    <script src="https://cdn.anychart.com/releases/8.11.0/js/anychart-core.min.js"></script>
    <script src="https://cdn.anychart.com/releases/8.11.0/js/anychart-treemap.min.js"></script>
    <style type="text/css">   
      html, body, #container {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
      }
  </style>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

3.设置数据

设置数据后将把已知宇宙中最大的前10个星系的规模可视化。这些星系非常庞大,所以需要以它们的直径来衡量它们是多少光年(光年是一束光在一个地球年中传播的距离,相当于大约 6 万亿英里)。

我已经从 Largest.org 获取了星系尺度的数据。

对于图表,树结构数据根级元素是“星系”,(按星系类型)分为“椭圆”和“螺旋”作为其子元素,它们又有个别星系对象的数组作为它们自己的子元素。

每个星系对象都具有<名称 \ 尺度>键值属性。例如,{name: "IC 1101", value: 4000000} 表示规模为 4,000,000 光年的 IC 1101 星系。说实话,很难理解它有多大。

var dataSet = [
  {name: "Galaxies", children: [
    {name: "Elliptical", children: [
      {name: "IC 1101", value: 4000000},
      {name: "Hercules A", value: 1500000},
      {name: "A2261-BCG", value: 1000000},
      {name: "ESO 306-17", value: 1000000},
      {name: "ESO 444-46", value: 402200},
    ]},
    {name: "Spiral", children: [  
      {name: "Rubin''s Galaxy", value: 832000},
      {name: "Comet Galaxy", value: 600000},
      {name: "Condor Galaxy", value: 522000},
      {name: "Tadpole Galaxy", value: 280000},
      {name: "Andromeda Galaxy", value: 220000} 
    ]}
  ]}
];

4. 编写一些JS树形图代码

到此只需几行JavaScript代码就可以为树形图提供动力。

1.使用anychart.onDocumentReady() 函数,加载树形图的所有JavaScript代码,确保它在网页完全加载并准备执行。

<script>
  anychart.onDocumentReady(function () {
    // JS树映射代码会写到这里
  });
</script>

2.然后,从第3步开始在树形图中添加我们想要可视化的数据。

<script>
 
  anychart.onDocumentReady(function () {
 
    var dataSet = [
      {name: "Galaxies", children: [
        {name: "Elliptical", children: [
          {name: "IC 1101", value: 4000000},
          {name: "Hercules A", value: 1500000},
          {name: "A2261-BCG", value: 1000000},
          {name: "ESO 306-17", value: 1000000},
          {name: "ESO 444-46", value: 402200},
        ]},
        {name: "Spiral", children: [  
          {name: "Rubin''s Galaxy", value: 832000},
          {name: "Comet Galaxy", value: 600000},
          {name: "Condor Galaxy", value: 522000},
          {name: "Tadpole Galaxy", value: 280000},
          {name: "Andromeda Galaxy", value: 220000} 
        ]}
      ]}
    ];
 
  });
 
</script>

3.添加以下代码将数据转换到图上。

var chart = anychart.treeMap(dataSet, "as-tree");

4.添加一个标题,将图表放入之前定义的 <div> 容器中,并使用 draw 命令显示它。

chart.title("The 10 Largest Galaxies in the Known Universe");
chart.container("container");
chart.draw();

现在JS树形图基本上已经准备好了:

加载树形图时,只会显示两个图块,“椭圆”和“螺旋”。然后可以单击它们,展开其各自的子星系,这就是所谓的下钻操作。

为什么会只有两块?因为默认情况下,最大深度值设置为1。这意味着一次只能看到其父级的一个级别。较低的级别是隐藏的。在第一层,将“星系”分为“椭圆”和“螺旋”,所以只能看到这一层。

显示所有星系图块只需要使用maxDepth()函数更改最大深度值。

chart.maxDepth(2);

效果如下:

在这张图表中,可以看到星系是如何根据层次结构进行分组的,还可以单击顶部的“椭圆”或“螺旋”标题来放大其子星系。

完整代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JavaScript Treemap Chart</title>
    <script data-fr-src="https://cdn.anychart.com/releases/8.11.0/js/anychart-core.min.js"></script>
    <script data-fr-src="https://cdn.anychart.com/releases/8.11.0/js/anychart-treemap.min.js"></script>
    <style type="text/css">   
      html, body, #container {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
 
    <script>
 
      anychart.onDocumentReady(function () {
 
        // 创建数据
        var dataSet = [
          {name: "Galaxies", children: [
            {name: "Elliptical", children: [
              {name: "IC 1101", value: 4000000},
              {name: "Hercules A", value: 1500000},
              {name: "A2261-BCG", value: 1000000},
              {name: "ESO 306-17", value: 1000000},
              {name: "ESO 444-46", value: 402200},
            ]},
            {name: "Spiral", children: [  
              {name: "Rubin''s Galaxy", value: 832000},
              {name: "Comet Galaxy", value: 600000},
              {name: "Condor Galaxy", value: 522000},
              {name: "Tadpole Galaxy", value: 280000},
              {name: "Andromeda Galaxy", value: 220000} 
            ]}
          ]}
        ];
        
        // 创建树形图并设置数据
        var chart = anychart.treeMap(dataSet, "as-tree");
 
        // 设置图表标题
        chart.title("The 10 Largest Galaxies in the Known Universe");
 
        // 设置图表的容器id
        chart.container("container");
 
        // 开始绘制图表
        chart.draw();
 
      });
 
    </script>
  </body>
</html>

现在,你可以一目了然地看到10个最大星系的规模并进行比较。下面展示如何自定义JavaScript树形图。

自定义JS树形图

A. 改变颜色

改变任何图表的外观和感觉有一种简单方法就是更改颜色。

chart.normal().fill(''#B46FC2'');
chart.hovered().fill(''#44008B'', 0.8);
chart.selected().fill(''#0A0068'', 0.8);
chart.selected().hatchFill("forward-diagonal", ''#282147'', 2, 20);

添加了fill()和hashFill()方法来更改树形图的颜色。

B. 应用线性色标

在树形图中,除了大小,图块的颜色也有助于突出显示比例。可以借助线性色标根据相应的数据维度自动为图块着色。

创建一个线性色标,为其提供两个值,一个为最低范围值,另一个为最高值,最后启用颜色范围。

var customColorScale = anychart.scales.linearColor();
customColorScale.colors([''#37B8F7'', ''#ffcc00'']);
chart.colorScale(customColorScale);
chart.colorRange().enabled(true);
chart.colorRange().length(''90%'');

实现这些需要修改上一节中的代码。

C. 格式化标签和工具提示

可以使用HTML来格式化标签。为此,需要为标签启用 HTML。然后,你就可以不受限制地使用HTML对它们进行格式化。

可以把标签格式化为<span>HTML元素,并对其进行样式设计,以增加字体大小和改变颜色。

chart.labels().useHtml(true);
chart.labels().format(
  "<spanfont-size: 24px; color: #00076f''>{%name}</span><br>{%value}"
);

正如你在上面的代码片段中看到的,还使用了{%name}和{%value}标记,用来更改树形图标签和工具提示的文本。这样,在创建可视化时将为每个星系输出名称和比例值。

此外,使用format()方法来定制工具提示的文本。一个内容丰富的工具提示有助于更好地理解数据。

chart.tooltip().format(
    "Scale: {%value} light-years"
);

D. 按升序排列图块

默认情况下,树形图图块按降序排列。可以看到星系是从高到低排列的,规模最大的IC 1101星系是左起第一个。

如果需要升序排列,那么添加:

chart.sort("asc");

下面是一个完整 样例:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>JavaScript Treemap Chart</title>
    <script data-fr-src="https://cdn.anychart.com/releases/8.11.0/js/anychart-core.min.js"></script>
    <script data-fr-src="https://cdn.anychart.com/releases/8.11.0/js/anychart-treemap.min.js"></script>
    <style type="text/css">   
      html, body, #container {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
 
    <script>
 
      anychart.onDocumentReady(function () {
 
        // create the data
        var dataSet = [
          {name: "Galaxies", children: [
            {name: "Elliptical", children: [
              {name: "IC 1101", value: 4000000},
              {name: "Hercules A", value: 1500000},
              {name: "A2261-BCG", value: 1000000},
              {name: "ESO 306-17", value: 1000000},
              {name: "ESO 444-46", value: 402200},
            ]},
            {name: "Spiral", children: [  
              {name: "Rubin''s Galaxy", value: 832000},
              {name: "Comet Galaxy", value: 600000},
              {name: "Condor Galaxy", value: 522000},
              {name: "Tadpole Galaxy", value: 280000},
              {name: "Andromeda Galaxy", value: 220000} 
            ]}
          ]}
        ];

        // create the treemap chart and set the data
        var chart = anychart.treeMap(dataSet, "as-tree");
 
        // set the chart title
        chart.title("The 10 Largest Galaxies in the Known Universe");

        // set a custom color scale
        var customColorScale = anychart.scales.linearColor();
        customColorScale.colors([''#37B8F7'', ''#ffcc00'']);
        chart.colorScale(customColorScale);
        chart.colorRange().enabled(true);
        chart.colorRange().length(''90%'');

        // format the labels
        chart.labels().useHtml(true);
        chart.labels().format(
          "<spanfont-size: 24px; color: #00076f''>{%name}</span><br>{%value}"
        );
  
        // format the tooltips
        chart.tooltip().format(
          "Scale: {%value} light years"
        );

        // sort in ascending order
        chart.sort("asc");
 
        // set the container id for the chart
        chart.container("container");
 
        // initiate drawing the chart
        chart.draw();
 
      });
 
    </script>
  </body>
</html>

以上就是利用JavaScript构建树形图的方法详解的详细内容,更多关于JavaScript树形图的资料请关注其它相关文章!

您可能感兴趣的文章:
  • 如何将JavaScript将数组转为树形结构
  • JavaScript平铺数组转树形结构的实现示例
  • 使用JS动态构建目录树
  • JavaScript树形组件实现无限级树形结构

JavaScript – 三维图库中的树形图

JavaScript – 三维图库中的树形图

我在3D中搜索图形相关的树形图.

我搜索了一些免费/付费的流行图书馆,但那些不符合我的要求.我附上了我找到的图形图像.

我已经搜索过这些图书馆,但他们没有在Treemap中提供3D.

> philogb
> highcharts
> nvd3
> amcharts
> jqplot
> anycharts

请建议一些符合我要求的图库.

解决方法

你能更具体地了解你的要求吗?

你看过three.js吗

他们没有明确的数据结构映射器,但也许您可以创建您的树状图,然后将其用作表面上的纹理,然后更改相机角度.

javascript 事件处理、鼠标拖动效果实现方法详解_javascript技巧

javascript 事件处理、鼠标拖动效果实现方法详解_javascript技巧

先看看要拖动的层(模拟窗口)的效果图吧。


要实现的拖动效果:鼠标左键在窗口上方的标题栏上按下,同时移动鼠标,窗口跟着移动。
窗口:

复制代码 代码如下:





一点准备工作:
要让窗口能自由移动,那么窗口的定位(position)应该采用绝对定位(absolute);
给窗口添加标题栏,这里使用一个放在窗口顶部的层实现,同时将标题栏的鼠标光标设置为拖动(move)形状(在chrome中拖动的时候,光标会变成文字光标,松开鼠标键后恢复)。
复制代码 代码如下:

#win {
position:absolute;
width:480px;
height:320px;
background-color:#d4d4d4;
border: 1px solid #4d4d4d;
}
#win_header {
width:480px;
height:48px;
background-color:#4d4d4d;
cursor:move;
}

定义一个工具函数,用来获取指定ID属性的元素:
复制代码 代码如下:

function $id(id) {
return document.getElementById(id);
}

定义一个浏览器核心标识isIE:
var isIE = (window.navigator.userAgent.indexOf("IE") == -1) ? false : true;
获取到窗口元素及其标题栏:
复制代码 代码如下:

var win = $id("win");
var header = $id("win_header");

为了方便记录鼠标和窗口的位置信息,创建一个位置:
复制代码 代码如下:

var pos =function(x, y) {
this.x = x;
this.y = y;
};

给窗口设置一个初始位置(css的left值和top值)。
这里不知道是为什么,如果不使用js设置这两个属性,就取不到值,在CSS中指定了也不行。
复制代码 代码如下:

var originalpos = new pos(20, 20);

在拖动窗口的过程中,需要记录的值有:
鼠标按下时鼠标光标的位置
复制代码 代码如下:

var oldmouse =new pos(0, 0);

鼠标按下时窗口的位置
var oldpos = new pos(0, 0);
鼠标移动时窗口的新的位置
var newpos = new pos(0, 0);
设置窗口的初始位置
复制代码 代码如下:

win.style.left = originalpos.x + "px";
win.style.top = originalpos.y + "px";

又是因为浏览器的差异(IE和非IE),元素绑定事件处理函数的方法不同(IE使用attachEvent,非IE使用addEventListener),为了简化事件绑定的操作,定义一个事件绑定函数:
复制代码 代码如下:

function bind(ev, func) {
if(isIE) {
  header.attachEvent("on" + ev, func);
} else {
  header.addEventListener(ev, func, false);
}
}

在做好这些工作后,就可以开始处理鼠标事件了。
在这个程序中,只希望鼠标左键拖动窗口,其它键都不能,所以需要判断是否是鼠标左键按下。而这个判断会在几个函数中都使用到,所以提取出来到一个函数中,通过传入的参数(鼠标键值,即按下了哪个键)判断。在这里,需要注意浏览器间的差异:IE中鼠标左键的值是1,而非IE中值是0.
复制代码 代码如下:

function isLeftButton(btn) {
if(isIE) {
if(btn == 1)
return true;
else
return false;
} else {
if(btn == 0)
return true;
else
return false;
}
}

拖动动作是在按下鼠标左键后移动来完成的。把这个动作分享开来,即是鼠标先触发了按下动作(mousedown),然后触发了移动动作(mousemove)。为了判断是否是真的在拖动还是只是鼠标从窗口上经过,设置一个变量来记录鼠标按下的状态:
var mousedown = false;
由于CSS中存在的兼容性问题,这里使用js来控制鼠标悬停在窗口标题栏上面的时候的颜色变化。
悬浮
复制代码 代码如下:

function over(e){
  header.style.backgroundColor = "#5d5d5d";
}

离开
复制代码 代码如下:

function out(e) {
header.style.backgroundColor = "#4d4d4d";
// 有时候鼠标会在未松开的情况下离开窗口,
// 此时通过触发鼠标的松开事件来使窗口脱离鼠标的控制
up(e);
}

按下
在按下事件中,需要先判断是否按下的是鼠标的左键;
若是才记录鼠标和窗口此时的位置,否则不记录。
复制代码 代码如下:

function down(e) {
e = e || event;
if(!isLeftButton(e.button))
return;
mousedown = true;
oldmouse.x = e.clientX;
oldmouse.y = e.clientY;
oldpos.x = parseInt(win.style.left.replace("px", ""));
oldpos.y = parseInt(win.style.top.replace("px", ""));
}

松开
复制代码 代码如下:

function up(e) {
if(!isLeftButton(e.button))
return;
mousedown = false;
}

移动
这里就涉及到鼠标的两个事件:
按下和移动。当且仅当鼠标左键按下时,移动动作才有效。
窗口的新位置,是由鼠标在拖动状态下的移动距离(X和Y的距离)决定的。即:
新的鼠标位置送去按下左键时记录下的位置,得到一个距离,然后将窗口的位置加上鼠标移动的距离得到窗口的新位置。
复制代码 代码如下:

function move(e) {
if(!isLeftButton(e.button))
return;
if(mousedown) {
e =e || event;
newpos.x = e.clientX - oldmouse.x;
newpos.y = e.clientY - oldmouse.y
win.style.left = (oldpos.x + newpos.x) + "px";
win.style.top = (oldpos.y + newpos.y) + "px";
}
}

事件处理都写好了,最后来给元素绑定上吧,阿门!
复制代码 代码如下:

bind("mouseover", over);
bind("mouseenter", over);
bind("mouseout", out);
bind("mouseleave", out);
bind("blur", out);
bind("mousedown", down);
bind("mouseup", up);
bind("mousemove", move);

不过在FF中的拖动有问题,只能第一次正常拖动,后面就有点乱了!

JavaScript与HTML的结合方法详解_javascript技巧

JavaScript与HTML的结合方法详解_javascript技巧

HTML中的JavaScript脚本必须位于<script>与</script>标签之间,JavaScript脚本可被放置在HTML页面的

标签和标签中,这种视情况而定,一般放在标签内。
一、<script> 标签</script>
      如需在HTML页面中插入JavaScript脚本,请使用<script>标签。<script>和</script>会告诉JavaScript在何处开始
和结束。<script>和</script>之间的代码行包含了JavaScript:
<span><script type="text/javascript"> 
alert("欢迎来到JavaScript世界!!!"); 
</script></span> 
登录后复制

您无需理解上面的代码。只需明白,浏览器会解释并执行位于 <script> 和 </script> 之间的 JavaScript。那些老
旧的实例可能会在<script>标签中使用type="text/javascript"。现在已经不必这样做了。JavaScript是所有现代浏览器<br /> 以及HTML5中的默认脚本语言。鉴于刚刚学习JavaScript语言的可以使用!<br /> <strong>二、<body>中的JavaScript</strong><br /> 在本例中,JavaScript会在页面加载时向HTML的<body>写文本:<br /> 实例代码:<br /> </p> <div> <div><pre> &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt; &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt; &lt;title&gt;JavaScript脚本语言&lt;/title&gt; &gt; &lt;/head&gt; &lt;body&gt; &lt;p&gt; JavaScript 能够直接写入 HTML 输出流中: &lt;/p&gt; &lt;script type=&quot;text/javascript&quot;&gt; document.write(&quot;&lt;h1&gt;This is a heading&lt;/h1&gt;&quot;); document.write(&quot;&lt;p&gt;this is a paragraph.&lt;/p&gt;&quot;); &lt;/script&gt; &lt;p&gt; 您只能在 HTML 输出流中使用 &lt;strong&gt;document.write&lt;/strong&gt;。 如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。 &lt;/p&gt; &lt;/body&gt; &lt;/html&gt; </pre><div>登录后复制</div></div> </div> <p> 我们先不管JavaScript代码怎么写和怎么运行,先来看运行结果:</p> <p><img id="theimg" onclick="window.open(this.src)" src="http://files.jb51.net/file_images/article/201511/20151123145841494.png&#63;20151023145850" alt="" /></p> <p><strong>三、JavaScript 函数和事件</strong><br /> 上面例子中的 JavaScript 语句,会在页面加载时执行。通常,我们需要在某个事件发生时执行代码,比如当用户<br /> 点击按钮时。如果我们把 JavaScript 代码放入函数中,就可以在事件发生时调用该函数。</p> <p><strong>四、<head>或<body>中的JavaScript</strong><br /> 您可以在 HTML 文档中放入不限数量的脚本。脚本可位于 HTML 的 <body> 或 <head> 部分中,或者同时存在于<br /> 两个部分中。通常的做法是把函数放入 <head> 部分中,或者放在页面底部。这样就可以把它们安置到同一处位置,<br /> 不会干扰页面的内容。<br /> </p> <p><strong>五、<head>中的JavaScript函数</strong><br /> 在本例中,我们把一个JavaScript函数放置到HTML页面的<head>部分。该函数会在点击按钮时被调用:<br /> 实例代码:<br /> </p> <div> <div><pre> &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt; &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt; &lt;title&gt;JavaScript脚本语言&lt;/title&gt; &lt;script type=&quot;text/javascript&quot;&gt; function myFunction() { document.getElementById(&quot;demo&quot;).innerHTML=&quot;My First JavaScript Function&quot;; } &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;My Web Page&lt;/h1&gt; &lt;p id=&quot;demo&quot;&gt;A Paragraph.&lt;/p&gt; &lt;button type=&quot;button&quot; onclick=&quot;myFunction()&quot;&gt;点击这里&lt;/button&gt; &lt;/body&gt; &lt;/html&gt; </pre><div>登录后复制</div></div> </div> <p>运行的结果为:</p> <p><img id="theimg" onclick="window.open(this.src)" src="http://files.jb51.net/file_images/article/201511/20151123150048761.png&#63;201510231510" alt="" /></p> <p>点击按钮后的效果为:</p> <p><img id="theimg" onclick="window.open(this.src)" src="http://files.jb51.net/file_images/article/201511/20151123150124134.png&#63;2015102315137" alt="" /></p> <p><strong>六、<body>中的JavaScrip 函数</strong><br /> 在本例中,我们把一个JavaScript函数放置到HTML页面的<body>部分。该函数会在点击按钮时被调用:<br /> 实例代码:<br /> </p> <div> <div><pre> &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt; &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt; &lt;title&gt;JavaScript脚本语言&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;My First Web Page&lt;/h1&gt; &lt;p id=&quot;demo&quot;&gt;A Paragraph.&lt;/p&gt; &lt;button type=&quot;button&quot; onclick=&quot;myFunction()&quot;&gt;点击这里&lt;/button&gt; &lt;script type=&quot;text/javascript&quot;&gt; function myFunction() { document.getElementById(&quot;demo&quot;).innerHTML=&quot;My First JavaScript Function&quot;; } &lt;/script&gt; &lt;/body&gt; &lt;/html&gt; </pre><div>登录后复制</div></div> </div> <p> 运行的结果与上述五的结果一样!<br /> <span><strong> 提示:</strong></span>我们把 JavaScript 放到了页面代码的底部,这样就可以确保在 <p> 元素创建之后再执行脚本。<br /> <strong>七、外部的JavaScript</strong><br /> 我们也可以把脚本保存到外部文件中。外部文件通常包含被多个网页使用的代码。外部 JavaScript 文件的文件扩<br /> 展名是 .js。如需使用外部文件,请在 <script> 标签的 "src" 属性中设置该 .js 文件,如果有大量的JavaScript代码,我<br /> 们提倡使用外部的JavaScript方式,一般我们也采用分离的方式连接到HTML文档中。<br /> 实例<br /> HTML代码:<br /> </p> <div> <div><pre> &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt; &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt; &lt;title&gt;JavaScript脚本语言&lt;/title&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;/js/myScript.js&quot;&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;My Web Page&lt;/h1&gt; &lt;p id=&quot;demo&quot;&gt;A Paragraph.&lt;/p&gt; &lt;button type=&quot;button&quot; onclick=&quot;myFunction()&quot;&gt;点击这里&lt;/button&gt; &lt;p&gt;&lt;b&gt;注释:&lt;/b&gt;myFunction 保存在名为 &quot;myScript.js&quot; 的外部文件中。&lt;/p&gt;&lt;p&gt;&lt;span&gt;立即学习&lt;/span&gt;“&lt;a href=&quot;https://pan.quark.cn/s/c1c2c2ed740f&quot; style=&quot;text-decoration: underline !important; color: blue; font-weight: bolder;&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Java免费学习笔记(深入)&lt;/a&gt;”;&lt;/p&gt; &lt;/body&gt; &lt;/html&gt; </pre><div>登录后复制</div></div> </div> <p>myScript.js代码:<br /> </p> <div> <div><pre> function myFunction() { document.getElementById(&quot;demo&quot;).innerHTML=&quot;My First JavaScript Function&quot;; } </pre><div>登录后复制</div></div> </div> <p>       运行的结果和上述一致!<br>        <span><strong>提示:</strong></span>在</p>中引用脚本文件都是可以的。实际运行效果与您在<script>标签中编写脚本完全一致。<br /> 外部脚本不能包含 <script> 标签。 <p>以上就是JavaScript与HTML的结合方法,希望对大家的学习有所帮助。 </script>

JavaScript中this关键字使用方法详解_javascript技巧

JavaScript中this关键字使用方法详解_javascript技巧

在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。JavaScript也提供了这个this关键字,不过用起来就比经典OO语言中要"混乱"的多了。

    下面就来看看,在JavaScript中各种this的使用方法有什么混乱之处?

    1、在HTML元素事件属性中inline方式使用this关键字: 

 

 // 可以在里面使用this

 ">division element


    我们一般比较常用的方法是在此使用:javascirpt: EventHandler(this),这样的形式。不过这里其实可以写任何合法的JavaScript语句,要是高兴在此定义个类也可以(不过将会是个内部类)。这里的原理是脚本引擎生成了一个div实例对象的匿名成员方法,而onclick指向这个方法。

    2、用DOM方式在事件处理函数中使用this关键字: 

 
复制代码 代码如下:

division element
 
 <script> <BR> var div = document.getElementById(''elmtDiv''); <BR> div.attachEvent(''onclick'', EventHandler); <br><br> function EventHandler() <BR> { <BR> // 在此使用this <BR> } <BR> </script> 

    这时的EventHandler()方法中的this关键字,指示的对象是IE的window对象。这是因为EventHandler只是一个普通的函数,对于attachEvent后,脚本引擎对它的调用和div对象本身没有任何的关系。同时你可以再看看EventHandler的caller属性,它是等于null的。如果我们要在这个方法中获得div对象引用,应该使用:this.event.srcElement。

    3、用DHTML方式在事件处理函数中使用this关键字:

 
division element

 <script> <BR> var div = document.getElementById(''elmtDiv''); <BR> div.onclick = function() <BR> { <BR> // 在此使用this <BR> }; <BR> </script>

    这里的this关键字指示的内容是div元素对象实例,在脚本中使用DHTML方式直接为div.onclick赋值一个EventHandler的方法,等于为div对象实例添加一个成员方法。这种方式和第一种方法的区别是,第一种方法是使用HTML方式,而这里是DHTML方式,后者脚本解析引擎不会再生成匿名方法。

    4、类定义中使用this关键字: 

 
复制代码 代码如下:

 function JSClass() 
  { 
      var myName = ''jsclass''; 
      this.m_Name = ''JSClass''; 
  } 

  JSClass.prototype.ToString = function() 
  { 
      alert(myName + '', '' + this.m_Name); 
  }; 

  var jc = new JSClass(); 
  jc.ToString(); 

    这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。



    5、为脚本引擎内部对象添加原形方法中的this关键字: 

  
复制代码 代码如下:

Function.prototype.GetName = function() 
  { 
      var fnName = this.toString();  
      fnName = fnName.substr(0, fnName.indexOf(''(''));  
      fnName = fnName.replace(/^function/, '''');  
      return fnName.replace(/(^\s+)|(\s+$)/g, ''''); 
  } 
  function foo(){} 
  alert(foo.GetName());     

    这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。

    6、结合2&4,说一个比较迷惑的this关键字使用: 

 
复制代码 代码如下:

 function JSClass() 
  { 
      this.m_Text = ''division element''; 
      this.m_Element = document.createElement(''DIV''); 
      this.m_Element.innerHTML = this.m_Text; 

      this.m_Element.attachEvent(''onclick'', this.ToString); 
  } 

  JSClass.prototype.Render = function() 
  { 
      document.body.appendChild(this.m_Element); 
  }      

  JSClass.prototype.ToString = function() 
  { 
      alert(this.m_Text); 
  }; 

  var jc = new JSClass(); 
  jc.Render();  
  jc.ToString(); 

    我就说说结果,页面运行后会显示:"division element",确定后点击文字"division element",将会显示:"undefined"。

    7、CSS的expression表达式中使用this关键字: 

 
复制代码 代码如下:

  
       
           
       
  
 
              
                    height: expression(this.parentElement.height);"> 
                  division element
 
          
 

    这里的this看作和1中的一样就可以了,它也是指代div元素对象实例本身。

    8、函数中的内部函数中使用this关键字: 

 
复制代码 代码如下:

 function OuterFoo() 
  { 
      this.Name = ''Outer Name''; 

      function InnerFoo() 
      { 
          var Name = ''Inner Name'';  
          alert(Name + '', '' + this.Name); 
      } 
      return InnerFoo; 
  } 
  OuterFoo()(); 

    运行结果显示是:"Inner Name, Outer Name"。按我们在2中的讲解,这里的结果如果是"Inner Name, undefined"似乎更合理些吧?但是正确的结果确实是前者,这是由于JavaScript变量作用域的问题决定的,详细了解推荐参看"原来JScript中的关键字''var''还是有文章的"一文及回复。

    说了这么多JavaScript中this的用法,其实this最根本的特性还是和OO语言中的定义相吻合的。之所以有这么多看似混乱的使用方式,是因为JavaScript语言(解释器和语言本身的内容)本身在实现上是遵循OO的(Object-based),连它的所有数据类型都是对象,也有Object这样一个super Object。但是这个语言在运行上(runtime),就没有遵循完备的OO特点,所以就出现了this的指代混乱。

    JavaScript里还有什么地方有this的使用呢?我暂时能想到的就这些了,欢迎讨论补充。

关于利用JavaScript构建树形图的方法详解js 构建树的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于JavaScript – 三维图库中的树形图、javascript 事件处理、鼠标拖动效果实现方法详解_javascript技巧、JavaScript与HTML的结合方法详解_javascript技巧、JavaScript中this关键字使用方法详解_javascript技巧的相关知识,请在本站寻找。

本文标签: