在网页中,可以使用“ ActiveX控件”和“ Java小程序”创建可用于执行各种任务的对象实例。 使用<OBJECT>
HTML标记将这些对象插入Web页面。 每个对象都有一个32位唯一标识符,该标识符插入<OBJECT>
标记的CLASSID
属性中。
表格数据控制
“表格数据控件”是Microsoft Internet Explorer内置的Microsoft ActiveX控件。 使用此对象,可以将ASCII(通常使用.txt扩展名)文件中的有序(定界)内容提取到HTML元素中。
例如,如果我们有一个文本文件,其中包含3个字段(与数据库中的列同义),并且这些字段由字符定界,则可以将这些字段的值提取到HTML页面中。
如果我们有相对少量的数据,我们需要经常更新此数据,并且需要客户端脚本,则此对象非常有用。 在这种情况下,控件可以充当小型数据库。
表格数据控件在Internet Explorer 4或更高版本中可用。 此控件的唯一缺点是,它是ActiveX控件,只有Internet Explorer支持它(Netscape需要插件)。
在下面的示例中,您会注意到我指的是特定的文件名。 这些是指本教程的代码档案中包含的文件,您可以在此处下载 。
实作
使用<OBJECT>
标记初始化ActiveX控件。 表格数据控件的CLASSID
(唯一标识符)为:
CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83
因此,我们在网页中初始化此控件,如下所示:
<OBJECT ID="SomeID" CLASSID="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
.....
.....
.....
</OBJECT>
任何对象(如applet)都具有许多参数,这些参数使用<PARAM>
标记指定。 表格数据控件具有大约7个参数,但是在这里,我将仅讨论其中更重要的参数:
-
DataURL
–包含数据的文件的路径,例如“ data.txt”。 -
UseHeader
–设置为true
,它指示我们要使用字段名称来引用特定字段。 通常,我们将其设置为true
,但是在某些应用程序中,可能不需要字段名称(标题)。 默认值为false
。 -
TextQualifier
–限定该文本的文本字符串开头和结尾的字符。 例如,在这里~My name is Premshree~
,TextQualifier
是'~
'。 -
FieldDelim
–字段分隔符用于区分数据文件的不同数据字段。 例如,考虑一个数据文件,其中有字段名称,年龄和性别。 这些字段的值将写为*SomeName*|*SomeAge*|*SomeSex*
。 在这里,使用的字段分隔符为'|
”,而我已经将“*
”用作文本限定符。
因此,完整的初始化将如下所示:
<OBJECT ID="SomeID" CLASSID="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="YourDataFile.txt">
<PARAM NAME="UseHeader" VALUE="TRUE">
<PARAM NAME="TextQualifier" VALUE="~">
<PARAM NAME="FieldDelim" VALUE="|">
</OBJECT>
参数名称不区分大小写。
TextQualifier
和FieldDelim
参数可以是任何字符。 选择一个不太可能在文本中使用的字符。
例子
在这些示例中,我将文本限定符用作“ ~
”,并将字段定界符用作“ |
”。 我为数据文件使用.txt扩展名,但是您可以使用任何喜欢的扩展名。
首先,让我们考虑一个简单的示例,其中将我的姓名和年龄存储在文本文件data1.txt中。 现在,我将使用<SPAN>
标记显示我的姓名和年龄。 这是这样做的:
name|age
~Premshree Pillai~|~19~
现在,我将提取此数据并将其显示在网页data1.htm中,如下所示:
<OBJECT ID="data1" CLASSID="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="data1.txt">
<PARAM NAME="UseHeader" VALUE="TRUE">
<PARAM NAME="TextQualifier" VALUE="~">
<PARAM NAME="FieldDelim" VALUE="|">
</OBJECT>
<SPAN DATASRC="#data1" DATAFLD="name"></SPAN>
<SPAN DATASRC="#data1" DATAFLD="age"></SPAN>
输出将显示: Premshree 19
注意SPAN
标签的属性。 DATASRC
指定要使用的数据源,该数据源与我们已初始化的对象的ID(此处为“ data1
”)相同。 DATAFLD
属性指定我们要显示的数据字段。 如您所见,数据文件data1.txt具有两个字段“名称”和“年龄”。 将DATAFLD
指定为' name
'将显示名称。
请注意,使用上述方法,您可以将数据从文本文件提取到任何HTML元素中。 但是上述方法效率低下,因为如果我们的数据文件包含多个条目,则将无法直接提取所有值。
在这些情况下,我们使用<TABLE>
标记。 TABLE
标记具有特殊的属性,如下面的示例所示。
考虑一个简单的示例,其中我们在文本文件中存储3个人的姓名,年龄和性别。 现在,我们要提取此数据并将其以表格形式显示在Web页上。
文本文件data2.txt如下所示:
name|age|sex
~Premshree Pillai~|~19~|~male~
~Vinod~|~18~|~male~
~Usha~|~19~|~female~
现在,我们可以提取上述所有数据,并(通过data2.htm)以表格形式显示如下:
<OBJECT ID="data2" CLASSID="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="data2.txt">
<PARAM NAME="UseHeader" VALUE="TRUE">
<PARAM NAME="TextQualifier" VALUE="~">
<PARAM NAME="FieldDelim" VALUE="|">
</OBJECT>
<TABLE DATASRC="#data2" BORDER="2">
<THEAD>
<TH>Name :</TH>
<TH>Age :</TH>
<TH>Sex :</TH>
</THEAD>
<TR>
<TD><SPAN DATAFLD="name"></SPAN></TD>
<TD><SPAN DATAFLD="age"></SPAN></TD>
<TD><SPAN DATAFLD="sex"></SPAN></TD>
</TR>
</TABLE>
输出将如下所示:
因此,我们仅在3个不同的<TD>
标记(列)中指定了三个数据字段( DATAFLD
)。 网页自动显示所有3组值(3行)。
我们可以向文本文件中添加任意数量的内容,而无需对提取这些值的HTML代码进行任何修改。
表格数据控件和JavaScript
可以使用JavaScript操作表格数据控件对象。 在第一个示例中, <SPAN>
元素显示了数据文件的第一个条目。 现在,假设我们向文件添加了另一个条目; 数据文件(data1.txt)现在看起来像这样:
name|age
~Premshree Pillai~|~19~
~Vinod~|~18~
现在,如果我们想查看第二个条目(即Vinod 18),我们可以这样做:
<OBJECT ID="data1" CLASSID="CLSID:333C7BC4-460F-11D0-
BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="data1.txt">
<PARAM NAME="UseHeader" VALUE="TRUE">
<PARAM NAME="TextQualifier" VALUE="~">
<PARAM NAME="FieldDelim" VALUE="|">
</OBJECT>
<SCRIPT LANGUAGE="JavaScript">
/* Get the complete data record set */
var dataSet=data1.recordset;
/* Go to next data */
dataSet.moveNext();
</SCRIPT>
<SPAN DATASRC="#data1" DATAFLD="name"></SPAN>
<SPAN DATASRC="#data1" DATAFLD="age"></SPAN>
现在,输出为:Vinod 18
上面的脚本很容易解释。 最初,我们使用recordset方法将数据文件的整个数据存储在变量数据集中。 moveNext()
方法指向下一个数据项(下一行)。 可以使用的其他一些方法是:
-
moveFirst()
–指向第一个数据项(第一行) -
moveLast()
–指向最后一个数据项(最后一行) -
EOF -
此属性用于检查我们是否到达文件末尾。
现在,我将用一个更动态的示例结束本文。 我将创建一个JavaScript代码,显示许多消息,每条消息都指向一个特定的URL。 在这里,股票报价器将从文本文件(档案中的tickerData.txt)读取其消息和相应的URL。 为了完全理解此代码,您必须熟悉动态HTML技术。
这是tickerData.txt文件:
~message~|~messageURL~
~SitePoint.com~|~http://www.sitepoint.com~
~WebmasterBase~|http://www.webmasterbase.com~
~BBC News~|http://www.bbc.co.uk~
还有tickerStyle.css文件:
.tickerStyle{font-family:verdana,arial,helvetica; color:#666699;
font-weight:bold; font-size:8pt; background:#EEEEFF;
border-right:#666699 solid 2px; border-left:#666699 solid 1px;
border-top:#666699 solid 1px; border-bottom:#666699 solid 2px;
padding:3px; width:400px; text-align:center; text-decoration:none}
.tickerStyle:hover{font-family:verdana,arial,helvetica;
color:#666699; font-weight:bold; font-size:8pt; background:#DDDDEE;
border-right:#666699 solid 1px; border-left:#666699 solid 2px;
border-top:#666699 solid 2px; border-bottom:#666699 solid 1px;
padding:3px; width:400px; text-align:center; text-decoration:none}
最后,ticker.htm:
<html>
<head>
<title>JavaScript Ticker (using Tabular Data Control)</title>
<link rel="stylesheet" href="tickerStyle.css">
<script language="JavaScript">
// JavaScript Ticker
// - using Tabular Data Control
// By Premshree Pillai
/*
The Ticker function
objName : the ID of the object to be used as data source
maxMsgs : the number of messages in the data file
counter : to keep count of the messages
timeOut : delay (in milliseconds)
*/
function TDC_Ticker(objName, counter, maxMsgs, timeOut)
{
try
{
eval('tickerSet=' + objName + '.recordset');
if(!tickerSet.EOF && counter<maxMsgs-1)
{
tickerSet.MoveNext();
counter++;
}
else
{
counter=0;
tickerSet.MoveFirst();
}
setTimeout("TDC_Ticker('"+objName+"','"+counter+"',
'"+maxMsgs+"','"+timeOut+"')", timeOut);
}
catch(e)
{
alert('This Ticker works with IE 4+ only.');
}
}
</script>
<!-- END JAVASCRIPT TICKER USING TABULAR DATA CONTROL -->
</head>
<body bgcolor="#FFFFFF">
<!-- BEGIN TICKER PLACEMENT -->
<center>
<object id="ticker" classid="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
<param name="DataURL" value="tickerData.txt">
<param name="UseHeader" value="TRUE">
<param name="TextQualifier" value="~">
<param name="FieldDelim" value="|">
</object>
<a href="" datasrc="#ticker" datafld="messageURL" class="tickerStyle">
<span id="tickerDiv" datasrc="#ticker" datafld="message"></span>
</a>
<script language="JavaScript">
var tickerMaxMsgs=3; // Maximum Messages in the Data File
var tickerCount=tickerMaxMsgs;
new TDC_Ticker('ticker',tickerCount,tickerMaxMsgs,2000); // Set the Ticker
</script>
</center>
<!-- END TICKER PLACEMENT -->
</body>
</html>