2010-06-14 30 views
6

我想要做的事情的概念非常简单。我有一个从XML文档通过XSLT加载的公司标识网格,每个标识都有自己独特的公司配置文件链接。使用悬停的XML内容更新DIV

我在页面上有一个单独的div,本质上是一个“预览”框。我想要做的是这样的:

我翻转了一个标志,它将公司名称和一个简短描述加载到预览div中。此内容通过XML加载。

我一直在搞乱Jquery的load()函数,改变目标文件加载悬停—,它几乎得到我想要的,但它将整个目标XML文档加载到div中。

我该如何将这个目标XML数据分离成单独的div? (我有不同的风格) 我假设我会以某种方式使用Ajax。我想将<name>节点加载到name_div中,并将<desc>节点加载到description_div中,并在悬停时更新它们。先谢谢您的帮助!

这里是我的工作代码的一些例子:

portfolio.xml文件(该文件是我的主要页面,显示网格和预览格,例如使用3家公司):

<portfolio> 
    <company> 
     <name>ABC Company</name> 
     <sdesc>Consumer products</sdesc> 
     <logo-thumb>abcco.jpg</logo-thumb> 
     <link>abcco.xml</link> 
    </company> 

    <company> 
     <name>DEF Company</name> 
     <sdesc>Communications firm</sdesc> 
     <logo-thumb>defco.jpg</logo-thumb> 
     <link>defco.xml</link> 
    </company> 
    <company> 
     <name>GHI Corporation</name> 
     <sdesc>Electronic products</sdesc> 
     <logo-thumb>ghico.jpg</logo-thumb> 
     <link>ghico.xml</link> 
    </company> 
</portfolio> 

以下XSLT在页面上显示的代码:

<xsl:for-each select="portfolio/company"> 
    <xsl:sort select="name" /> 

     <div class="invest-port-thumb"> 
     <a> 
     <xsl:attribute name="href"> 
       <xsl:value-of select="link" /> 
     </xsl:attribute> 

     <img> 
     <xsl:attribute name="src"> 
       <xsl:value-of select="logo-thumb" /> 
     </xsl:attribute> 
     </img> 
     </a> 
     </div> 

</xsl:for-each> 

这是“预览格”的HTML结构:

<div id="preview"> 

<div id="preview-name"> [Name to display here] </div> 
<div id="preview-desc"> [Description to display here] </div> 

</div> 

所有3个公司徽标都加载到页面中,每个徽标都显示从中加载的链接图像。期望的效果是在悬停时显示“preview-name”div中的内容以及“preview-desc”div中的内容。


让我试着做一个更具体的。下面是一些例子:

portfolio.xml文件(该文件是我的主要页面,显示网格和预览格,例如使用3家公司):

<portfolio> 
    <company> 
     <name>ABC Company</name> 
     <sdesc>Consumer products</sdesc> 
     <logo-thumb>abcco.jpg</logo-thumb> 
     <link>abcco.xml</link> 
    </company> 

    <company> 
     <name>DEF Company</name> 
     <sdesc>Communications firm</sdesc> 
     <logo-thumb>defco.jpg</logo-thumb> 
     <link>defco.xml</link> 
    </company> 
    <company> 
     <name>GHI Corporation</name> 
     <sdesc>Electronic products</sdesc> 
     <logo-thumb>ghico.jpg</logo-thumb> 
     <link>ghico.xml</link> 
    </company> 
</portfolio> 

下面的XSLT显示该代码在页面上:

<xsl:for-each select="portfolio/company"> 
    <xsl:sort select="name" /> 

     <div class="invest-port-thumb"> 
     <a> 
     <xsl:attribute name="href"> 
       <xsl:value-of select="link" /> 
     </xsl:attribute> 

     <img> 
     <xsl:attribute name="src"> 
       <xsl:value-of select="logo-thumb" /> 
     </xsl:attribute> 
     </img> 
     </a> 
     </div> 

</xsl:for-each> 

这是 “预览格” 的HTML结构:

<div id="preview"> 

<div id="preview-name"> [Name to display here] </div> 
<div id="preview-desc"> [Description to display here] </div> 

</div> 

所有3个公司徽标都加载到页面中,每个徽标都显示从<logo-thumb>加载的链接图像。期望的效果是在悬停时,在“preview-name”div中显示<name>的内容,并在“preview-desc”div中显示<sdesc>的内容。

+0

我感兴趣的(学术)中发现如果/ XSL如何工作了通过XMLHttpRequest – Pointy 2010-06-14 15:28:33

+0

加载XML时,您有没有考虑加载整个文档通过Ajax进入jquery,解析XML,然后将必要的信息添加到每个元素?将详细说明,如果你想.. – Jeriko 2010-06-14 15:31:23

+0

这是另一种选择。我只是觉得这会很难做到。目前,我的页面是按照我的想法设置的。我拥有XML文件中的所有公司,每个公司都有他们的名称和说明。我只是不确定如何将其分离出来,并根据我所展示的图片显示内容。 – 2010-06-14 15:44:29

回答

0

严格地说,你可以在url后面加一个选择器,并且只返回ajax调用的一部分。

所以,像这样:

$('#name_div').load('/path/yourXmlFile.xml name:first'); 

现在,让网络要求你想要看的东西,每次是不是很有效。您可能想要将输出缓存到变量中。

+0

好点。我并不局限于这种展示方式 - 这只是我尝试过的一种方式。目前,显示整个网格的文件的来源已经具有我需要用XML显示的所有数据。任何关于如何根据我已经滚动过的图像显示已经加载的数据到div的见解? – 2010-06-14 15:53:04

+0

您需要在xml和divs之间创建关联。在你翻译的图像中添加一个像id =“image-55”的id,然后在你的xml中,你有一个嵌入了id的结构,比如' ...' – artlung 2010-06-14 15:55:24

1

保留网页的语义和样式表的结构,我尝试做这样的事情:

<xsl:for-each select="portfolio/company"> 
    <xsl:sort select="name" /> 
    <div class="invest-port-thumb"> 
     <a href="{link}"><img src="{logo-thumb}" /></a> 
     <div class="preview"> 
     <div class="preview-name"><xsl:value-of select="name" /></div> 
     <div class="preview-desc"><xsl:value-of select="sdesc" /></div> 
     </div> 
    </div> 
</xsl:for-each> 

然后,在CSS样式表,你可以使用:hover伪类和+组合子显示或隐藏预习。有一些crossbrowser兼容性问题。您应该检查Stu Nicholls site以获得更好的语义和CSS示例。

+0

预览框将始终可见,并且包含最后一家公司的翻转信息,直到您翻转新的公司为止。使用value-of的问题是,它只会将第一个节点拉出我的XML文件,而不是我徘徊。 – 2010-06-15 18:27:23

+0

@Andrew:你想让异步的东西,它是同步的!您拥有XML文档中的所有数据。然后转换那个XSLT。最后,用CSS应用样式(当然,在你的变换中添加一个链接元素)。复杂性不在XSLT中(我发布的工作得很好,如果你发布完整的样式表,我们可以帮助你更多)。复杂性在于用于布局的跨浏览器CSS。例如,查看Nicholls的网站。对于我所说的检查我的网站之一的活生生的例子:http://www.aranedabienesraices.com.ar – 2010-06-15 22:52:06

+0

我同意亚历杭德罗。您需要从XSLT中获取所需的HTML。然后您可以隐藏除正在预览的DIV之外的所有DIV。 您也可以为每个预览数据DIV指定一个ID,然后使用基于该ID的预览数据加载预览DIV。该ID可以对应于用户在哪里徘徊。 – JoshNaro 2010-07-15 16:27:42

0

我会将名称和desc作为锚的一部分或它的子图像,可能使用名称的ALT标签和描述的REL标签。

将鼠标悬停在任何锚点上,我将使用jQuery [.attr()]来获取包含您想要的名称和描述的属性值,并将其分配到各自的目标DIV中。

(见“配方类别”中http://www.masterchef.com.au/home.htm类似的例子)