我来到这个页面是为了寻找同一个问题的答案。看到这里展示的材料启发了我调整我的思维上限,并尝试一下。以下是我的直接解决方案,取自工作沙箱页面。
<head>
<title>VBScript Date Functions Demonstration</title>
<link rel="stylesheet"
type="text/css"
href="/css/WebApplication1.CSS">
<link rel="stylesheet"
type="text/css"href="/css/Widget_Generators.css">
<script src="/JavaScipt/commonPageHelpers.js"></script>
</head>
<body onload="cphSetTitleFromTag()" lang="en-us">
<h1 class="PageTitle" id="spnPageTitle"></h1>
其中,WebApplication1.css 定义了一个 PageTitle 类选择器,如下所示。
h1.PageTitle
{
font-family: Arial,Helvetica,Geneva,sans-serif ;
font-size: 14pt ;
font-weight: bold ;
font-style: normal ;
color: purple ;
text-align: left ;
margin-bottom: 1em ;
}
定义的细节无关紧要;关键是这样的类存在于嵌入或链接到您的页面的 CSS 中。由于这个测试站点中已经有四个页面,它们都共享相同的级联样式,因此我将它们放入一个单独的文件中,所有四个页面都链接到该文件。
同样,所有四个页面都链接到 commonPageHelpers.js,其中包含以下代码。
// ----------------------------------------------------------------------------
// Define some constants that have broad usage, well beyond their applications
// herein.
// ----------------------------------------------------------------------------
var cLENGTH_OF_EMPTY_STRING = 0;
var cDEFAULT_PAGE_TITLE_SPAN_PLACEHOLDER = "spnPageTitle";
var cTYPEOF_IS_STRING = "string";
var cTYPEOF_IS_UNDEFINED = "undefined";
var cTRUE = 1;
var cFALSE = 0;
var cTHE_EMPTY_STRING = "";
function cphSetTitleFromTag( pstrSpanID )
{
if ( typeof( pstrSpanID) == cTYPEOF_IS_UNDEFINED )
{ // Degenerate case 1 of 3: Use the default placeholder span ID.
document.getElementById( cDEFAULT_PAGE_TITLE_SPAN_PLACEHOLDER ).innerHTML = document.title;
} // TRUE block, if ( typeof (pstrSpanID) == cTYPEOF_IS_UNDEFINED )
else if (typeof(pstrSpanID) == cTYPEOF_IS_STRING )
{ // Explicitly cast pstrSpanID to a string, to simplify subsequent processing.
var strSpanIDString = pstrSpanID.toString( );
if ( strSpanIDString.length > cLENGTH_OF_EMPTY_STRING )
{
document.getElementById( strSpanIDString ).innerHTML = document.title;
} // TRUE block, if ( strSpanIDString.length > cLENGTH_OF_EMPTY_STRING )
else
{ // Degenerate case 3 of 3: Use the default placeholder span ID.
document.getElementById( cDEFAULT_PAGE_TITLE_SPAN_PLACEHOLDER ).innerHTML = document.title;
} // FALSE block, if ( strSpanIDString.length > cLENGTH_OF_EMPTY_STRING )
} // TRUE block, else if (typeof(pstrSpanID) == cTYPEOF_IS_STRING )
else
{ // Degenerate case 2 of 3: Use the default placeholder span ID.
document.getElementById( cDEFAULT_PAGE_TITLE_SPAN_PLACEHOLDER ).innerHTML = document.title;
} // FALSE block, if ( typeof (pstrSpanID) == cTYPEOF_IS_UNDEFINED ) and else if (typeof(pstrSpanID) == cTYPEOF_IS_STRING )
} // cphSetTitleFromTag
好的,伙计们,我知道这个函数有点矫枉过正,但它让我可以灵活地选择不同的元素 ID,而无需触及这个例程,并且当它获得空字符串时,它会尝试优雅地失败,将其视为等同于省略完全参数,这在开始语句中的 typeof 等于 "undefined" 的测试中涵盖。
将这个简短的 JavaScript 事件处理程序安全地隐藏在外部脚本文件中,在运行时从标题标签获取标题文本只需要两件事。
- 如上所示,外部脚本文件链接到您的页面。
- Body 标记具有 onload="cphSetTitleFromTag()" 属性,这会导致在页面完成加载时调用 JavaScript 函数cphSetTitleFromTag时不带参数。
- 您希望标题出现的标签具有指定的ID属性。我对H1的选择是任意的。
为了您的方便,我在commonPageHelpers.js上发布了 JavaScript 库。
最后,上述方法适用于客户端运行 JavaScript 的任何环境;服务器可以是任何东西,尽管 ASP.NET 页面可以在服务器端完成这一壮举。