<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>zhyi_12</title>
    <description></description>
    <link>http://zhyi-12.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>功能简单的基于jquery UI的grid组件</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/211229" style="color:red;">http://zhyi-12.javaeye.com/blog/211229</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这两天看了下UI1.5的代码，重新把grid组件组件写了下。实现了一些比较简单的功能。</p>
<ol>
<li>ajax分页</li>
<li>支持当前页面排序和数据库排序</li>
<li>支持查询条件</li>
<li>支持隐藏列</li>
<li>支持模拟数据</li>
<li>支持行动作回调</li>
<li>支持checkbox</li>
<li>支持convert（在页面上把数据true读成&ldquo;是&rdquo;，false 读成&ldquo;否&rdquo;）</li>
<li>待写</li>
</ol>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhyi-12.javaeye.com/blog/211229#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jul 2008 18:31:01 +0800</pubDate>
        <link>http://zhyi-12.javaeye.com/blog/211229</link>
        <guid>http://zhyi-12.javaeye.com/blog/211229</guid>
      </item>
      <item>
        <title>jQuery UI v1.5 Released，代码重构到不认识</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/205032" style="color:red;">http://zhyi-12.javaeye.com/blog/205032</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>官方博客：jQuery UI v1.5 Released, Focus on Consistent API and Effects<br />http://jquery.com/blog/2008/06/09/jquery-ui-v15-released-focus-on-consistent-api-and-effects/<br />&nbsp;&nbsp;&nbsp; 粗粗的翻了几个UI的代码，第一感觉是变了，变得不认识了，整个UI的写法变得很不熟悉了，完全的重构了。<br />不得不佩服这帮哥们重构的决心和毅力。</p>
<table border="0" width="546" style="height: 100px;">
<tbody>
<tr>
<td>&nbsp; When we first started with the UI project, we set out to build a generic, basic, and simple way of adding and extending core interaction to DOM elements. However, we soon found that our approach wasn&rsquo;t working for UI. Using the &ldquo;simple&rdquo; approach, we were only able to serve simple interaction modules, but not full featured UI widgets. The second problem was that some plugins came from external sources making the UI suite seem disjointed and inconsistent.</td>
</tr>
</tbody>
</table>
<p>&nbsp;&nbsp; 一些变化：</p>
<p>&nbsp;&nbsp; 1&nbsp; 统一UI的构建方法（$.widget），每一个UI提供统一的初始化调用方法init()，下面的这种方式现在已经整合到$.widget方法中，</p>
<p>不再像1.5（b4）中的每一个UI中都有一段处理的代码。</p>
<ul>
<li><em>$(&rdquo;div&rdquo;).draggable()</em> creates a draggable</li>
<li><em>$(&rdquo;div&rdquo;).draggable(&rdquo;destroy&rdquo;)</em> destroys it</li>
<li><em>$(&rdquo;div&rdquo;).draggable(&rdquo;method&rdquo;)</em> calls another method on the plugin</li>
</ul>
<p>&nbsp;&nbsp;&nbsp; 2&nbsp; 貌似要稳定了</p>
<pre>Stability, Debugging, Testing and jquery.simulate</pre>
<table border="0" width="553" style="height: 24px;">
<tbody>
<tr>
<td>&nbsp; It was extremely important that jQuery UI v1.5 was not only feature-rich but also stable. We took several steps to greatly improve our debugging and testing including the setup of our <a href="http://ui.jquery.com/bugs">own dedicated bugtracker</a> with jQuery UI specific version and milestone targeting. We also invested a lot of time into <a href="http://ui.jquery.com/bugs/browser/trunk/tests">new unit tests</a> that make use of the jQuery test suite <a href="http://dev.jquery.com/view/trunk/qunit">Qunit</a>. Finally, we created <a href="http://ui.jquery.com/bugs/browser/trunk/tests/simulate/jquery.simulate.js">jquery.simulate.js</a>, a plugin specifically designed to <strong>fire true browser events</strong>. This means, you can actually tell the plugin to pick up your draggable, move it to a certain position and release it again, just if you&rsquo;d be talking to a real testing person.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 3 这个好像有点意思</p>
<pre>   Roll Your Own Themes: ThemeRoller!</pre>
<table border="0" width="552" style="height: 24px;">
<tbody>
<tr>
<td><a href="http://ui.jquery.com/themeroller">ThemeRoller</a> offers a <strong>unique approach to theming UI components</strong> specifically built for jQuery UI. With ThemeRoller, you can <strong>create your very own theme</strong> for your project within minutes. It&rsquo;s completely intuitive, comes wich rich controls to <strong>change the color and design of each state</strong>, and then <strong>previews your theme with the actual UI components</strong> as you work!</td>
</tr>
</tbody>
</table>
<p>&nbsp;&nbsp;&nbsp; jquery UI 在代码重构的彻底上可以看出他的决心,放出少许期待之心.呵呵,先好好看看这次的代码去.</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhyi-12.javaeye.com/blog/205032#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 10:34:00 +0800</pubDate>
        <link>http://zhyi-12.javaeye.com/blog/205032</link>
        <guid>http://zhyi-12.javaeye.com/blog/205032</guid>
      </item>
      <item>
        <title>freemarker第一天</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/160735" style="color:red;">http://zhyi-12.javaeye.com/blog/160735</a>&nbsp;
          发表时间: 2008年01月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>打字越来越累了，也开始玩一下代码生成。<br />今天仔细看了下freemarker，貌似还比较好玩的样子。试着写一写model的模板了。</p><pre name="code" class="java">/**
 * 代码声明
 */
package ${package};

import org.youi.common.model.BaseObject;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Pattern;
/**
 * 功能说明:
 * ${modelDescription}
 * @author zhyi
 * @version 1.0.1
 * 
 */
@Entity
@Table(name = &quot;${tableName}&quot;)
public class ${className} extends BaseObject {
	&lt;#list attributes as attribute&gt;
	private ${attribute.type} ${attribute.name};&lt;#if attribute.description??&gt;//${attribute.description}&lt;/#if&gt;
	
	&lt;/#list&gt;
	&lt;#list attributes as attribute&gt;
	public void set${attribute.FUName}(${attribute.type} ${attribute.name}){
		this.${attribute.name} = ${attribute.name};
	}
	
	&lt;#if attribute.notNull??&amp;&amp;attribute.notNull==&quot;true&quot;&gt;@NotNull&lt;/#if&gt;&lt;#if attribute.id==&quot;true&quot;&gt;
	@Id&lt;/#if&gt;&lt;#if attribute.column??&gt;
	@Column(name = &quot;${attribute.column}&quot;)&lt;/#if&gt;&lt;#if attribute.length??&gt;
	@Length(&lt;#if attribute.min??&gt;min = ${attribute.min},&lt;/#if&gt;max = ${attribute.length})&lt;/#if&gt;
	public ${attribute.type} get${attribute.FUName}(){
		return this.${attribute.name};
	}
	
	&lt;/#list&gt;
	public boolean equals(Object o) {
		if (o == null ) return false;
		if (this == o ) return true;
		if ( !(o instanceof ${className}) ) return false;
		${className} obj = (${className}) o;
		return &lt;#list attributes as attribute&gt;this.get${attribute.FUName}().equals(obj.get${attribute.FUName}())&lt;#if attribute.size != &quot;large&quot;&gt;&amp;&amp;&lt;/#if&gt;&lt;/#list&gt;;
	}
	
	public String toString(){
		return ${toString};
	}
	
	public int hashCode() {
		int hash = 0;
		&lt;#list attributes as attribute&gt;
		&lt;#if attribute.id == &quot;true&quot;&gt;
		hash+=this.get${attribute.FUName}().hashCode()*17+37;
		&lt;/#if&gt;
		&lt;/#list&gt;
		return hash;
	}
}</pre><p>今天学会的一些东西：</p><p>1、使用&lt;#list&gt;&lt;/#list&gt; 循环标签时，变量对应的顺序和集合的类型密切相关，适当的时机选择使用list还是set。用list的时候，为lis中t对象增加size属性，标志最后一个值为特定值以作些判断。比如我生成equals方法时，碰到最后一个属性不加&amp;&amp;符号。</p><p>2、&lt;#if attribute.notNull??&amp;&amp;attribute.notNull==&quot;true&quot;&gt;@NotNull&lt;/#if&gt;&lt;#if attribute.id==&quot;true&quot;&gt; ：if判断还真是有意思，居然这么干 attribute.notNull??</p><p>就用到了这两样东西，第一天的印象还不错，明天继续学习。</p><p>简单调用的代码:</p><pre name="code" class="java">        Map root = new HashMap();
        root.put(&quot;package&quot;,   &quot;org.youi.model&quot;);
        root.put(&quot;className&quot;, &quot;User&quot;);
        root.put(&quot;tableName&quot;, &quot;YOUI_USER&quot;);
        root.put(&quot;modelDescription&quot;, &quot;用户&quot;);
        root.put(&quot;toString&quot;, &quot;this.userName+this.userId&quot;);
        
        List attributes = new ArrayList();
        root.put(&quot;attributes&quot;, attributes);
        Map attribute1 = new HashMap();
        attributes.add(attribute1);
        attribute1.put(&quot;type&quot;, &quot;String&quot;);
        attribute1.put(&quot;name&quot;, &quot;userId&quot;);
        attribute1.put(&quot;FUName&quot;, &quot;UserId&quot;);
        attribute1.put(&quot;column&quot;, &quot;USER_ID&quot;);
        attribute1.put(&quot;size&quot;, &quot;fitst&quot;);
        attribute1.put(&quot;id&quot;, &quot;true&quot;);
        attribute1.put(&quot;length&quot;, &quot;20&quot;);
        attribute1.put(&quot;min&quot;, &quot;6&quot;);
        attribute1.put(&quot;description&quot;, &quot;用户ID&quot;);
        attribute1.put(&quot;notNull&quot;, &quot;true&quot;);
        
        Map attribute2 = new HashMap();
        attributes.add(attribute2);
        attribute2.put(&quot;type&quot;, &quot;String&quot;);
        attribute2.put(&quot;name&quot;, &quot;userName&quot;);
        attribute2.put(&quot;FUName&quot;, &quot;UserName&quot;);
        attribute2.put(&quot;column&quot;, &quot;USER_NAME&quot;);
        attribute2.put(&quot;size&quot;, &quot;2&quot;);
        attribute2.put(&quot;id&quot;, &quot;true&quot;);
        attribute2.put(&quot;notNull&quot;, &quot;true&quot;);
        
        Map attribute3 = new HashMap();
        attributes.add(attribute3);
        attribute3.put(&quot;type&quot;, &quot;String&quot;);
        attribute3.put(&quot;name&quot;, &quot;password&quot;);
        attribute3.put(&quot;FUName&quot;, &quot;Password&quot;);
        attribute3.put(&quot;column&quot;, &quot;PASSWORD&quot;);
        attribute3.put(&quot;size&quot;, &quot;large&quot;);
        attribute3.put(&quot;id&quot;, &quot;false&quot;);
        /* Merge data-model with template */
        ModelCode modelCode = new ModelCode();
        modelCode.setClassName(&quot;User&quot;);
        modelCode.setOutPath(&quot;E:/workspace/youi/src/org/youi/model/User.java&quot;);
        modelCode.setData(root);
        GeneratorFactory.getInstance().generatorCode(&quot;model&quot;,modelCode);</pre><p>&nbsp;</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhyi-12.javaeye.com/blog/160735#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 Jan 2008 15:38:22 +0800</pubDate>
        <link>http://zhyi-12.javaeye.com/blog/160735</link>
        <guid>http://zhyi-12.javaeye.com/blog/160735</guid>
      </item>
      <item>
        <title>jquery组件创建模式(转载)</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/143908" style="color:red;">http://zhyi-12.javaeye.com/blog/143908</a>&nbsp;
          发表时间: 2007年11月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<p>转自 <font face="Arial"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern">http://www.learningjquery.com/2007/10/a-plugin-development-pattern</a></font></p>
<p>I've been developing jQuery plugins for quite a while now, and I've become rather comfortable with a particular style of plugin development for my scripts. This article is meant to share the pattern that I've found especially useful for plugin authoring. It assumes you already have an understanding of plugin development for jQuery; if you're a novice plugin author, please review the <a href="http://docs.jquery.com/Plugins/Authoring">jQuery Authoring Guidelines</a> first.</p>
<p>There are a few <em>requirements</em> that I feel this pattern handles nicely:</p>
<ol>
    <li>Claim only a single name in the jQuery namespace </li>
    <li>Accept an options argument to control plugin behavior </li>
    <li>Provide public access to default plugin settings </li>
    <li>Provide public access to secondary functions (as applicable) </li>
    <li>Keep private functions private </li>
    <li>Support the Metadata Plugin </li>
</ol>
<p>I'll cover these requirements one by one, and as we work through them we'll build a simple plugin which highlights text.<br />
<span id="more-83"></span></p>
<h4>Claim only a single name in the jQuery namespace</h4>
<p>This implies a <em>single</em>-plugin script. If your script contains multiple plugins, or complementary plugins (like $.fn.doSomething() and $.fn.undoSomething()) then you'll claim multiple names are required. But in general when authoring a plugin, strive to use only a single name to hold all of its implementation details.</p>
<p>In our example plugin we will claim the name &quot;hilight&quot;.</p>
<div class="igBar"><span id="ljavascript-1"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-1'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-1">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// Our plugin implementation code goes here.</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>And our plugin can be invoked like this:</p>
<div class="igBar"><span id="ljavascript-2"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-2">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$<span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'#myDiv'</span><span style="COLOR: #333333">)</span>.<span style="COLOR: #006600">hilight</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>But what if we need to break up our implementation into more than one function? There are many reasons to do so: the design may require it; it may result in a simpler or more readable implementation; and it may yield better <abbr title="Object Oriented">OO</abbr>OO semantics.</p>
<p>It's really quite trivial to break up the implementation into multiple functions without adding noise to the namespace. We do this by recognizing, and taking advantage of, the fact that <em>functions are first-class objects</em> in JavaScript. Like any other object, functions can be assigned properties. Since we have already claimed the &quot;hilight&quot; name in the jQuery prototype object, any other properties or functions that we need to expose can be declared as properties on our &quot;hilight&quot; function. More on this later.</p>
<h4>Accept an options argument to control plugin behavior</h4>
<p>Let's add support to our hilight plugin for specifying the foreground and background colors to use. We should allow options like these to be passed as an options object to the plugin function. For example:</p>
<div class="igBar"><span id="ljavascript-3"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-3'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-3">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>options<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #222222">var</span> defaults = <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; foreground: <span style="COLOR: #3366cc">'red'</span>,</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=background"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">background</span></a>: <span style="COLOR: #3366cc">'yellow'</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// Extend our default options with those provided.</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #222222">var</span> opts = $.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=extend"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">extend</span></a><span style="COLOR: #333333">(</span>defaults, options<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// Our plugin implementation code goes here.</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>Now our plugin can be invoked like this:</p>
<div class="igBar"><span id="ljavascript-4"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-4">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$<span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'#myDiv'</span><span style="COLOR: #333333">)</span>.<span style="COLOR: #006600">hilight</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; foreground: <span style="COLOR: #3366cc">'blue'</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span><span style="COLOR: #333333">)</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>&nbsp;</p>
<h4>Provide public access to default plugin settings</h4>
<p>An improvement we can, and should, make to the code above is to expose the default plugin settings. This is important because it makes it very easy for plugin users to override/customize the plugin with minimal code. And this is where we begin to take advantage of the function object.</p>
<div class="igBar"><span id="ljavascript-5"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-5">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>options<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// Extend our default options with those provided.</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// Note that the first arg to extend is an empty object -</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// this is to keep from overriding our &quot;defaults&quot; object.</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #222222">var</span> opts = $.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=extend"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">extend</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span><span style="COLOR: #333333">}</span>, $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span>, options<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// Our plugin implementation code goes here.</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// plugin defaults - added as a property on our plugin function</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span> = <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; foreground: <span style="COLOR: #3366cc">'red'</span>,</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=background"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">background</span></a>: <span style="COLOR: #3366cc">'yellow'</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>Now users can include a line like this in their scripts:</p>
<div class="igBar"><span id="ljavascript-6"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// this need only be called once and does not</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// have to be called from within a 'ready' block</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span>.<span style="COLOR: #006600">foreground</span> = <span style="COLOR: #3366cc">'blue'</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>And now we can call the plugin method like this and it will use a blue foreground color:</p>
<div class="igBar"><span id="ljavascript-7"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-7'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-7">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$<span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'#myDiv'</span><span style="COLOR: #333333">)</span>.<span style="COLOR: #006600">hilight</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>As you can see, we've allowed the user to write a single line of code to alter the default foreground color of the plugin. And users can still selectively override this new default value when they want:</p>
<div class="igBar"><span id="ljavascript-8"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-8">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// override plugin default foreground color</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span>.<span style="COLOR: #006600">foreground</span> = <span style="COLOR: #3366cc">'blue'</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">...</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// invoke plugin using new defaults</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$<span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'.hilightDiv'</span><span style="COLOR: #333333">)</span>.<span style="COLOR: #006600">hilight</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">...</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// override default by passing options to plugin method</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$<span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'#green'</span><span style="COLOR: #333333">)</span>.<span style="COLOR: #006600">hilight</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; foreground: <span style="COLOR: #3366cc">'green'</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span><span style="COLOR: #333333">)</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>&nbsp;</p>
<h4>Provide public access to secondary functions as applicable</h4>
<p>This item goes hand-in-hand with the previous item and is an interesting way to extend your plugin (and to let others extend your plugin). For example, the implementation of our plugin may define a function called &quot;format&quot; which formats the hilight text. Our plugin may now look like this, with the default implementation of the format method defined below the hilight function.</p>
<div class="igBar"><span id="ljavascript-9"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-9">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>options<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// iterate and reformat each matched element</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #000066">return</span> <span style="FONT-WEIGHT: bold; COLOR: #000066">this</span>.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=each"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">each</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #222222">var</span> $this = $<span style="COLOR: #333333">(</span><span style="FONT-WEIGHT: bold; COLOR: #000066">this</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; ...</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #222222">var</span> markup = $this.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=html"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">html</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// call our format function</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; markup = $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">format</span><span style="COLOR: #333333">(</span>markup<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; $this.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=html"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">html</span></a><span style="COLOR: #333333">(</span>markup<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// define our format function</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">format</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>txt<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span><span style="COLOR: #3366cc">'</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #3366cc">&nbsp; return '</span>&amp;<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=lt"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">lt</span></a>;strong&amp;<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=gt"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">gt</span></a>;<span style="COLOR: #3366cc">' + txt + '</span>&amp;<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=lt"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">lt</span></a>;/strong&amp;<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=gt"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">gt</span></a>;<span style="COLOR: #3366cc">';</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #3366cc">}; </span></div>
    </li>
</ol>
</div>
</div>
</div>
<p>We could have just as easily supported another property on the options object that allowed a callback function to be provided to override the default formatting. That's another excellent way to support customization of your plugin. The technique shown here takes this a step further by actually exposing the format function so that it can be redefined. With this technique it would be possible for others to ship their own custom overrides of your plugin נin other words, it means others can write plugins for your plugin.</p>
<p>Considering the trivial example plugin we're building in this article, you may be wondering when this would ever be useful. One real-world example is the <a href="http://malsup.com/jquery/cycle/">Cycle Plugin</a>. The Cycle Plugin is a slideshow plugin which supports a number of built-in transition effects נscroll, slide, fade, etc. But realistically, there is no way to define every single type of effect that one might wish to apply to a slide transition. And that's where this type of extensibility is useful. The Cycle Plugin exposes a &quot;transitions&quot; object to which users can add their own custom transition definitions. It's defined in the plugin like this:</p>
<div class="igBar"><span id="ljavascript-10"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-10">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">cycle</span>.<span style="COLOR: #006600">transitions</span> = <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; ...</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>This technique makes it possible for others to define and ship transition definitions that plug-in to the Cycle Plugin.</p>
<h4>Keep private functions private</h4>
<p>The technique of exposing part of your plugin to be overridden can be very powerful. But you need to think carefully about what parts of your implementation to expose. Once it's exposed, you need to keep in mind that any changes to the calling arguments or semantics may break backward compatibility. As a general rule, if you're not sure whether to expose a particular function, then you probably shouldn't.</p>
<p>So how then do we define more functions without cluttering the namespace and without exposing the implementation? This is a job for <em>closures</em>. To demonstrate, we'll add another function to our plugin called &quot;debug&quot;. The debug function will log the number of selected elements to the <a href="http://getfirebug.com/">Firebug</a> console. To create a closure, we wrap the entire plugin definition in a function (as detailed in the <a href="http://docs.jquery.com/Plugins/Authoring">jQuery Authoring Guidelines</a>).</p>
<div class="igBar"><span id="ljavascript-11"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-11">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// create closure</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">(</span><span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>$<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>options<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; debug<span style="COLOR: #333333">(</span><span style="FONT-WEIGHT: bold; COLOR: #000066">this</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; ...</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// private function for debugging</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #222222">function</span> debug<span style="COLOR: #333333">(</span>$obj<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #000066">if</span> <span style="COLOR: #333333">(</span>window.<span style="COLOR: #006600">console</span> &amp;&amp; window.<span style="COLOR: #006600">console</span>.<span style="COLOR: #006600">log</span><span style="COLOR: #333333">)</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; window.<span style="COLOR: #006600">console</span>.<span style="COLOR: #006600">log</span><span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'hilight selection count: '</span> + $obj.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=size"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">size</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; ...</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// end of closure</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">}</span><span style="COLOR: #333333">)</span><span style="COLOR: #333333">(</span>jQuery<span style="COLOR: #333333">)</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>Our &quot;debug&quot; method cannot be accessed from outside of the closure and thus is private to our implementation.</p>
<h4>Support the Metadata Plugin</h4>
<p>Depending on the type of plugin you're writing, adding support for the <a href="http://docs.jquery.com/Plugins/Metadata/metadata">Metadata Plugin</a> can make it even more powerful. Personally, I love the Metadata Plugin because it lets you use unobtrusive markup to override plugin options (which is particularly useful when creating demos and examples). And supporting it is very simple!<br />
<strong>Update</strong>: This bit was optimized per suggestion in the comments.</p>
<div class="igBar"><span id="ljavascript-12"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-12">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>options<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; ...</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// build main options before element iteration</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #222222">var</span> opts = $.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=extend"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">extend</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span><span style="COLOR: #333333">}</span>, $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span>, options<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="FONT-WEIGHT: bold; COLOR: #000066">return</span> <span style="FONT-WEIGHT: bold; COLOR: #000066">this</span>.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=each"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">each</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #222222">var</span> $this = $<span style="COLOR: #333333">(</span><span style="FONT-WEIGHT: bold; COLOR: #000066">this</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// build element specific options</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #222222">var</span> o = $.<span style="COLOR: #006600">meta</span> ? $.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=extend"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">extend</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span><span style="COLOR: #333333">}</span>, opts, $this.<span style="COLOR: #006600">data</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span><span style="COLOR: #333333">)</span> : opts;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; ... </div>
    </li>
</ol>
</div>
</div>
</div>
<p>This changed line does a couple of things:</p>
<ul>
    <li>it tests to see if the Metadata Plugin is installed </li>
    <li>if it is installed, it extends our options object with the extracted metadata. </li>
</ul>
<p>This line is added as the last argument to <code>jQuery.extend</code> so it will override any other option settings. Now we can drive behavior from the markup if we choose:</p>
<pre><code>&lt;!--  markup  --&gt;
&lt;div class=&quot;hilight { background: 'red', foreground: 'white' }&quot;&gt;
  Have a nice day!
&lt;/div&gt;
&lt;div class=&quot;hilight { foreground: 'orange' }&quot;&gt;
  Have a nice day!
&lt;/div&gt;
&lt;div class=&quot;hilight { background: 'green' }&quot;&gt;
  Have a nice day!
&lt;/div&gt;
</code></pre>
<p>And now we can hilight each of these divs uniquely using a single line of script:</p>
<div class="igBar"><span id="ljavascript-13"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-13">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">$<span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'.hilight'</span><span style="COLOR: #333333">)</span>.<span style="COLOR: #006600">hilight</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span>; </div>
    </li>
</ol>
</div>
</div>
</div>
<p>&nbsp;</p>
<h4>Putting it All Together</h4>
<p>Below is the completed code for our example:</p>
<div class="igBar"><span id="ljavascript-14"><a href="http://www.learningjquery.com/2007/10/a-plugin-development-pattern#" onclick="javascript:showPlainTxt('javascript-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-14">
<div class="javascript">
<ol>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// create closure</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #333333">(</span><span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>$<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// plugin definition</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>options<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; debug<span style="COLOR: #333333">(</span><span style="FONT-WEIGHT: bold; COLOR: #000066">this</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; </div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// build main options before element iteration</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #222222">var</span> opts = $.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=extend"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">extend</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span><span style="COLOR: #333333">}</span>, $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span>, options<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; </div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// iterate and reformat each matched element</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #000066">return</span> <span style="FONT-WEIGHT: bold; COLOR: #000066">this</span>.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=each"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">each</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; $this = $<span style="COLOR: #333333">(</span><span style="FONT-WEIGHT: bold; COLOR: #000066">this</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// build element specific options</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; <span style="COLOR: #222222">var</span> o = $.<span style="COLOR: #006600">meta</span> ? $.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=extend"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">extend</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span><span style="COLOR: #333333">}</span>, opts, $this.<span style="COLOR: #006600">data</span><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span><span style="COLOR: #333333">)</span> : opts;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// update element styles</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; $this.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=css"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">css</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; &nbsp; backgroundColor: o.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=background"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">background</span></a>,</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; &nbsp; color: o.<span style="COLOR: #006600">foreground</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; <span style="COLOR: #333333">}</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; <span style="COLOR: #222222">var</span> markup = $this.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=html"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">html</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// call our format function</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; markup = $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">format</span><span style="COLOR: #333333">(</span>markup<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; $this.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=html"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">html</span></a><span style="COLOR: #333333">(</span>markup<span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="COLOR: #333333">}</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// private function for debugging</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #222222">function</span> debug<span style="COLOR: #333333">(</span>$obj<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #000066">if</span> <span style="COLOR: #333333">(</span>window.<span style="COLOR: #006600">console</span> &amp;amp;&amp;amp; window.<span style="COLOR: #006600">console</span>.<span style="COLOR: #006600">log</span><span style="COLOR: #333333">)</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; &nbsp; window.<span style="COLOR: #006600">console</span>.<span style="COLOR: #006600">log</span><span style="COLOR: #333333">(</span><span style="COLOR: #3366cc">'hilight selection count: '</span> + $obj.<a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=size"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">size</span></a><span style="COLOR: #333333">(</span><span style="COLOR: #333333">)</span><span style="COLOR: #333333">)</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// define and expose our format function</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">format</span> = <span style="COLOR: #222222">function</span><span style="COLOR: #333333">(</span>txt<span style="COLOR: #333333">)</span> <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #000066">return</span> <span style="COLOR: #3366cc">'&lt;strong&gt;'</span> + txt + <span style="COLOR: #3366cc">'&lt;/strong&gt;'</span>;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp;</div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">// plugin defaults</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; $.<span style="COLOR: #006600">fn</span>.<span style="COLOR: #006600">hilight</span>.<span style="COLOR: #006600">defaults</span> = <span style="COLOR: #333333">{</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; foreground: <span style="COLOR: #3366cc">'red'</span>,</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; &nbsp; <a href="http://www.learningjquery.com/wp-content/themes/jquery/docs.php?fn=background"><span style="FONT-WEIGHT: bold; COLOR: #b85b5a">background</span></a>: <span style="COLOR: #3366cc">'yellow'</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace">&nbsp; <span style="COLOR: #333333">}</span>;</div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">// end of closure</span></div>
    </li>
    <li style="FONT-WEIGHT: normal; COLOR: #3a6a8b; FONT-STYLE: normal; FONT-FAMILY: 'Courier New', Courier, monospace">
    <div style="FONT-WEIGHT: normal; FONT-FAMILY: 'Courier New', Courier, monospace"><span style="COLOR: #009900; FONT-STYLE: italic">//</span></div>
    </li>
    <li style="FONT-WEIGHT: bold; COLOR: #26536a">
    div<div style="FONT-WEIGHT: normal;</li></ol></div></div></div></font>
          <br/>
          <span style="color:red;">
            <a href="http://zhyi-12.javaeye.com/blog/143908#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 27 Nov 2007 10:23:39 +0800</pubDate>
        <link>http://zhyi-12.javaeye.com/blog/143908</link>
        <guid>http://zhyi-12.javaeye.com/blog/143908</guid>
      </item>
      <item>
        <title>使用jquery做树组件</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/143822" style="color:red;">http://zhyi-12.javaeye.com/blog/143822</a>&nbsp;
          发表时间: 2007年11月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 最近整理了一下树，使用jquery插件的方式重写。感觉比以前仅仅基于jquery写看的舒服多了。和以前一样还是借用treeview 的样式。&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;目前实现的功能和准备移植能的功能：</p><ol><li>树的按层初始化（通过expanded属性可以控制节点的默认展开） </li><li>根节点的可控显示（通过初始化参数 isShowRoot控制） </li><li>支持单独为每一个节点设置展开、关闭和图标文件（属性<span style="font-family: Arial">fileIcon、</span><span style="font-family: Arial">folderIcon、<span style="font-family: Arial">openFolderIcon</span></span>） </li><li>支持复选框（youiChecked属性控制） </li><li>树的点击动作（通过<span style="font-family: Arial">youiAction属性关联注册动作，事件 </span>默认为click ，通过<span style="font-family: Arial">actionHandle属性控制，可以为dblclick</span>） </li><li>动态读取（<span style="font-family: Arial">src属性，未完成，还在考虑那种方式比较好，只实现了简单的id和text的读取。</span>） </li><li>拖放（属性<span style="font-family: Arial">draggable控制</span> 依赖jquery 的ui组件 draggable，简单的实现，未完善） </li><li>树的搜索根据路径查找节点（支持未读取数据方式的查找展开，以前实现的速度比较慢，改动比较大，还在想用什么方法比较好） </li></ol><p>action注册：</p><p>&nbsp;</p><div class="code_title">html&nbsp;代码</div><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">li</span><span>&nbsp;</span><span class="attribute">youiAction</span><span>=</span><span class="attribute-value">&quot;showStatusBar&quot;</span><span>&nbsp;</span><span class="attribute">youiChecked</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;2703000000004&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">span</span><span class="tag">&gt;</span><span>2703000000004失业率（月度数据）</span><span class="tag"><span class="tag-name">span</span><span class="tag">&gt;</span><span class="tag"><span class="tag-name">a</span><span class="tag">&gt;</span><span class="tag"><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </span></span></span></li></ol></div><p>&nbsp;</p><div class="code_title">js 代码</div><div class="dp-highlighter"><ol class="dp-c"><li class="alt"><span><span>jQuery.actionFactory.register(</span><span class="string">&quot;showStatusBar&quot;</span><span>,</span><span class="keyword">function</span><span>(checked){ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp; alert(</span><span class="keyword">this</span><span>.options.text); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(checked==</span><span class="string">&quot;true&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;显示状态栏&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;隐藏状态栏&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>});&nbsp;&nbsp;</span> </li></ol></div><p><span>2703000000004失业率（月度数据）</span></p><p>增加功能:</p><ol><li><div>动态读取（xml数据集格式）</div></li><li><div>xml数据附加其他属性到树节点</div></li><li><div>节点定位openPath</div></li></ol><div class="code_title">js 代码</div><div class="dp-highlighter"><ol class="dp-c"><li class="alt"><span><span>$(</span><span class="string">&quot;#demoTree&quot;</span><span>).load(</span><span class="string">&quot;template.html&quot;</span><span>,</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;templateTree&nbsp;=&nbsp;$(</span><span class="keyword">this</span><span>).youiTree({ &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;treeMapObject:{ &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapId&nbsp;&nbsp;&nbsp;:'fileId', &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapText&nbsp;:'fileName', &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapPid&nbsp;&nbsp;:'parentFileId' &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributes:'filePath' &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;templateTree.openPath(</span><span class="string">&quot;t1/t11/t21&quot;</span><span>); &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="keyword">this</span><span>).show(); &nbsp;&nbsp;</span></li><li><span>});&nbsp;&nbsp;</span></li></ol></div>
          <br/>
          <span style="color:red;">
            <a href="http://zhyi-12.javaeye.com/blog/143822#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Nov 2007 21:29:10 +0800</pubDate>
        <link>http://zhyi-12.javaeye.com/blog/143822</link>
        <guid>http://zhyi-12.javaeye.com/blog/143822</guid>
      </item>
      <item>
        <title>使用jquery做报表组件</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/141116" style="color:red;">http://zhyi-12.javaeye.com/blog/141116</a>&nbsp;
          发表时间: 2007年11月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 以前做统计项目的时候写过基于jquery的报表展示组件，现在改用jquery的插件方式重新构建。东西写的比较难，共享出来的目的就是希望多收集一些报表组件的需求，以及多学习一些js的写法，特别是希望用jquery的朋友分享一些jquery写组件的经验。</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhyi-12.javaeye.com/blog/141116#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 16 Nov 2007 11:15:00 +0800</pubDate>
        <link>http://zhyi-12.javaeye.com/blog/141116</link>
        <guid>http://zhyi-12.javaeye.com/blog/141116</guid>
      </item>
      <item>
        <title>小试jquery构建UI组件</title>
        <author>zhyi_12</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhyi-12.javaeye.com">zhyi_12</a>&nbsp;
          链接：<a href="http://zhyi-12.javaeye.com/blog/134501" style="color:red;">http://zhyi-12.javaeye.com/blog/134501</a>&nbsp;
          发表时间: 2007年10月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 最近试用了一下EXT2.0的UI组件，又把jquery的官方UI插件库下来看了下。虽说我个人是更喜欢jquey的风格的，但对于组件化的UI来说，两者目前还有较大的差距。翻翻jquery的插件库，没有找到一个比较顺眼的菜单组件。正好拿这个开刀，仿照EXT写个组件自娱自乐一下。鄙视一下自己直接拿了EXT的图标就用。</p><p>&nbsp; 习惯性的使用dom元素的属性进行扩展。&nbsp;习惯性的喜欢下面的方式构建插件</p><ol><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;构建框架 <p class="code_title">js 代码</p><p class="code_title">&nbsp;</p><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span>(function($)&nbsp;{ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$.youi&nbsp;=&nbsp;$.youi&nbsp;||&nbsp;{}; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menu&nbsp;=&nbsp;{}; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem&nbsp;=&nbsp;{}; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; <span style="font-family: Courier New; background-color: #fafafa">$.extend($.youi.menu, {..........});</span></span> </li><li><span><span style="background-color: #fafafa">&nbsp;&nbsp;&nbsp;&nbsp;</span></span> </li><li><span><span style="background-color: #fafafa">&nbsp;&nbsp;&nbsp; <span style="font-family: Courier New; background-color: #fafafa">$.extend($.youi.menuItem, {..........});</span></span></span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.................... &nbsp;&nbsp;</span> </li><li><span>})(jQuery);&nbsp;&nbsp;</span> </li></ol></div></li><li>&nbsp;定义jquery扩展访问方法 </li></ol><p>&nbsp;&nbsp;&nbsp;&nbsp; </p><div class="dp-highlighter"><ol class="dp-c"><li class="alt"><span><span>$.fn.extend({ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;youiMenu:</span><span class="keyword">function</span><span>(options){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;menu&nbsp;=&nbsp;</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menu.create(</span><span class="keyword">this</span><span>,options); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;menu; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;youiMenuItem:</span><span class="keyword">function</span><span>(options){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;menuItem&nbsp;=&nbsp;</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.create(</span><span class="keyword">this</span><span>,options); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;menuItem; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>});&nbsp;&nbsp;</span> </li></ol></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.&nbsp;&nbsp;&nbsp; 写执行代码，代码向来写的很不规范，每次都等着重构。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 扩展 $.youi.menu </p><div class="code_title">js代码</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span>$.extend($.youi.menu,&nbsp;{ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;menuItems:[], &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;初始化函数 </span>&nbsp;</span> </li><li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;create:function(el,options){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menu.initMenu(el,options); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;body&quot;</span><span>,document).click(function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menu.closeMenu(el); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;initMenu:function(el,options){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;ul&gt;li&quot;</span><span>,el).each(function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="keyword">this</span><span>).youiMenuItem({menu:el}); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;closeMenu:function(menu){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$($.youi.menu.menuItems).each(function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;ul&quot;</span><span>,</span><span class="keyword">this</span><span>).hide(); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menu.attr(</span><span class="string">&quot;activeMenu&quot;</span><span>,</span><span class="string">&quot;false&quot;</span><span>);&nbsp;&nbsp;//菜单激活属性&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>});&nbsp;&nbsp;</span> </li></ol></div><p class="code_title">&nbsp;</p><p>&nbsp;扩展<span style="font-family: Arial">$.youi.menuItem</span></p><p>向来喜欢用dom的属性进行扩展。习惯了jquery的options。</p><div class="code_title">js 代码</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span>$.extend($.youi.menuItem,&nbsp;{ &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;menuItemAttrs:function(el){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;id&quot;</span><span>), &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;text&quot;</span><span>), &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIcon:el.attr(</span><span class="string">&quot;menuIcon&quot;</span><span>), &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;youiAction&quot;</span><span>),</span><span class="comment">//opera中&nbsp;action属性会自动加上路径&nbsp;file://D:... </span><span>&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hotKey&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;hotKey&quot;</span><span>), &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;menuType&quot;</span><span>),</span><span class="comment">//本想使用type的&nbsp;可opera不干 </span><span>&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checked&nbsp;:el.attr(</span><span class="string">&quot;youiChecked&quot;</span><span>),</span><span class="comment">//opera中checked属性只能显示checked，有时opera，无语了.... </span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;group&quot;</span><span>), &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;active&nbsp;&nbsp;:el.attr(</span><span class="string">&quot;active&quot;</span><span>) &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;create:function(el,options){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options&nbsp;=&nbsp;$.extend({},options,$.youi.menuItem.menuItemAttrs(el)); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!options.id){ &nbsp;&nbsp;//处理id属性</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.id&nbsp;=&nbsp;</span><span class="string">&quot;menu-&quot;</span><span>+$.youi.menu.menuItems.length; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.attr(</span><span class="string">&quot;id&quot;</span><span>,options.id); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(options.type==</span><span class="string">&quot;menuSplit&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.initMenuSplit(el,options); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(options.type==</span><span class="string">&quot;menuBar&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.initMenuBar(el,options); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.initMenuItem(el,options); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;ul:first&quot;</span><span>,el).hide(); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;ul:first&quot;</span><span>,el).addClass(</span><span class="string">&quot;youi-menu-panel&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp; </li><li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;为菜单节点添加访问方法 </span>&nbsp;</span> </li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.extend(el,{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addMenuItem:function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.addMenuItem(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getParent:function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;el.parent(</span><span class="string">&quot;li&quot;</span><span>).youiMenuItem({menu:options.menu}); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toString:function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>.attr(</span><span class="string">&quot;id&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.mouseover(function(){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.addClass(</span><span class="string">&quot;youi-menu-active&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.hoverOverLI($(</span><span class="keyword">this</span><span>),options); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.mouseout(function(){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.removeClass(</span><span class="string">&quot;youi-menu-active&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menuItem.hoverOutLI($(</span><span class="keyword">this</span><span>)); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;action&nbsp;=&nbsp;options.action; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(action){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.click(function(){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>($(</span><span class="keyword">this</span><span>).attr(</span><span class="string">&quot;active&quot;</span><span>)==</span><span class="string">&quot;false&quot;</span><span>){</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;};</span><span class="comment">//非活动菜单 </span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(typeof(action)==</span><span class="string">&quot;string&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery.actionFactory[action].apply(el,[]); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(err){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//alert(&quot;click:&quot;+err.message); </span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;#out&quot;</span><span>).html(err.message); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//alert(&quot;not&nbsp;find&nbsp;callback&nbsp;function:&quot;+action); </span><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(typeof(action)==</span><span class="string">&quot;function&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action.apply(el); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.click(function(){</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;}); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.youi.menu.menuItems.push(el); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;initMenuSplit:function(el,options){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.addClass(</span><span class="string">&quot;youi-menu-split&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.append('<span class="keyword">class</span><span>=</span><span class="string">&quot;youi-menu-split-span&quot;</span><span>/&gt;'); &nbsp;&nbsp;</span> </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;initMenuBar:function(el,options){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.addClass(</span><span class="string">&quot;youi-menu-horizontal&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.click(function(){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;activeMenu&nbsp;=&nbsp;options.menu.attr(</span><span class="string">&quot;activeMenu&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(activeMenu==</span><span class="string">&quot;true&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.menu.attr(</span><span class="string">&quot;activeMenu&quot;</span><span>,</span><span class="string">&quot;false&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;ul&quot;</span><span>,</span><span class="keyword">this</span><span>).hide(); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options.menu.attr(</span><span class="string">&quot;activeMenu&quot;</span><span>,</span><span class="string">&quot;true&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="keyword">this</span><span>).mouseover(); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;initMenuItem:function(el,options){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.addClass(</span><span class="string">&quot;youi-menu-vertical&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;menuUl&nbsp;=&nbsp;$(</span><span class="string">&quot;ul:first&quot;</span><span>,el); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(menuUl.size()==</span><span class="number">0</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuUl&nbsp;=&nbsp;$(</span><span class="string">&quot; <ul>&quot;</ul></span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.append(menuUl); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(menuUl.prev().is(</span><span class="string">&quot;a&quot;</span><span>)){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(el.get(</span><span class="number">0</span><span>).firstChild).wrap(''); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;link&nbsp;=&nbsp;$(</span><span class="string">&quot;a:first&quot;</span><span>,el); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.addClass(</span><span class="string">&quot;youi-menu-vertical-a&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(options.active==</span><span class="string">&quot;false&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.css(</span><span class="string">&quot;color&quot;</span><span>,</span><span class="string">&quot;#8C8C8C&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>($(</span><span class="string">&quot;li&quot;</span><span>,menuUl).size()&gt;</span><span class="number">0</span><span>){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.addClass(</span><span class="string">&quot;youi-menu-vertical-arrow&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;menuIconDiv&nbsp;=&nbsp;$(</span><span class="string">&quot;div.youi-menu-icon&quot;</span><span>,link); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(menuIconDiv.size()===</span><span class="number">0</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIconDiv&nbsp;=&nbsp;$('<span class="string">&quot;images/youi/s.gif&quot;</span><span>&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">&quot;youi-menu-icon&quot;</span><span>/&gt;'); &nbsp;&nbsp;</span> </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link.prepend(menuIconDiv); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;menuIcon&nbsp;=&nbsp;options.menuIcon; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(options.checked==</span><span class="string">&quot;false&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(options.group){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIconDiv.addClass(</span><span class="string">&quot;youi-menu-unchecked-icon&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(options.checked==</span><span class="string">&quot;true&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(options.group){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIconDiv.addClass(</span><span class="string">&quot;youi-menu-group-checked-icon&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIconDiv.addClass(</span><span class="string">&quot;youi-menu-checked-icon&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(menuIcon){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIconDiv.css(</span><span class="string">&quot;backgroundImage&quot;</span><span>,</span><span class="string">&quot;url(&quot;</span><span>+menuIcon+</span><span class="string">&quot;)&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.mousedown(function(){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>($(</span><span class="keyword">this</span><span>).attr(</span><span class="string">&quot;active&quot;</span><span>)==</span><span class="string">&quot;false&quot;</span><span>){</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;}; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;checked&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.getAttribute(</span><span class="string">&quot;youiChecked&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;group&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.getAttribute(</span><span class="string">&quot;group&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;menuIconDiv&nbsp;=&nbsp;$(</span><span class="string">&quot;img.youi-menu-icon:first&quot;</span><span>,</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(checked&nbsp;==&nbsp;</span><span class="string">&quot;false&quot;</span><span>){ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(group){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="keyword">this</span><span>).parent().find('&gt;&nbsp;li[</span><span class="annotation">@group</span><span>='+group+']&nbsp;&gt;&nbsp;a&nbsp;&gt;&nbsp;img').not(menuIconDiv).removeClass(</span><span class="string">&quot;youi-menu-group-checked-icon&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="keyword">this</span><span>).parent().find('&gt;&nbsp;li[</span><span class="annotation">@group</span><span>='+group+']').not(</span><span class="keyword">this</span><span>).attr(</span><span class="string">&quot;youiChecked&quot;</span><span>,</span><span class="string">&quot;false&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menuIconDiv.addClass(</span><span class="string">&quot;youi-menu-group-checked-icon&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb