在HTML / ColdFusion中,如何跳转到列表中的某个位置?

时间:2018-02-20 15:30:21

标签: html coldfusion anchor

我有一个使用CFQUERY创建的长客户列表。我想在列表上方显示字母A到Z作为锚点,当选择一个时,转到客户列表上的那个位置。我不知道该怎么做。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用SQL LEFT() 获取姓氏的第一个字母单独列

<cfquery name="getCustomers">
  SELECT C.FirstName, C.LastName, LEFT(C.LastName,1) AS FirstLetter
  FROM Customers C
  ORDER BY C.LastName
</cfquery>

然后,当您在HTML中输出名称时,可以使用<cfoutput>属性来处理每个字母。

首先制作索引:

<cfoutput query="getCustomers" group="FirstLetter">
  <a href="##Letter#FirstLetter#">#FirstLetter#</a> |
</cfoutput>

这将列出像

这样的列表
  

A | B | C | F | G | K |

其中每个字母都链接到HTML锚点,显然会跳过丢失的字母,因为查询未选中它们。 (我无法让他们在这篇文章中显示正确的锚点链接,不确定如何)

然后在每个组的开头输出带有锚点的名称列表:

<cfoutput query="getCustomers" group="FirstLetter">
  <a name="Letter#FirstLetter#"><hr /></a>
  <cfoutput><p>#FirstName# #LastName#</p></cfoutput>
</cfoutput>

所以它看起来像

  


约翰·亚当斯左·玛丽·亚伦森
杰克·巴伯
凯特·柯林斯

等,其中每个硬标尺都是列表锚

你知道组属性是如何工作的,是吗?如果没有,只需look it up

(*)以上是“伪CF”,它缺少查询等数据源属性。 我希望它有所帮助。

答案 1 :(得分:-1)

继续尝试;

<cfquery name="RetrieveNames" datasource="#DataSource#">
    SELECT FirstName, LastName FROM tblContacts
            ORDER BY LastName, FirstName
</cfquery>

<cfset LastFirstLetter="">

<cfoutput query="RetrieveNames">
<cfif Left(LastName,1) is not LastFirstLetter>
    <cfset LastFirstLetter = Left(LastName,1)>
    <a href="###LastFirstLetter#">#LastFirstLetter#</a>
</cfif>
</cfoutput>

<hr>

<cfset LastFirstLetter="">

<cfoutput query="RetrieveNames">
<cfif Left(LastName,1) is not LastFirstLetter>
    <cfset LastFirstLetter = Left(LastName,1)>
    <a name="#LastFirstLetter#"></a><b>#LastFirstLetter#</b>
    <hr>
</cfif>
#LastName#, #FirstName#<br>
</cfoutput>

我确实想查询这样的查询;

<cfquery name="RetrieveLetters" dbtype="query">
    select substr(LastName,1,1) as FirstLetter
            from RetrieveNames
            group by substr(LastName,1,1)
</cfquery>

但我无法让它发挥作用。但是如果可以,那么你可以在构建href链接时循环使用它,你就不会有它当前拥有的不必要的循环......也许有人可以改进它

相关问题