selectNodes(Object context, XPath sortXPath)æ–ÒŽ³•½W¬äºŒä¸ªå‚æ•?sortXPath"å¥½åƒæ˜¯ç”¨æ¥æŽ’åºçš„åQŒä½†ä¸çŸ¥å¦‚何写sortXPath傿•°ã€?br />
先谢˜q‡ï¼Œåœ¨çº¿½{‰ã€?br />
说明åQšæœ¬äºÞZ¸éœ€è¦xslæŽ’åºæ–ÒŽ¡ˆã€?br />
二ã€åˆ†æžä»£ç ,æå‡ºé—®é¢˜åQŒè§£å†³é—®é¢?br />
1ã€æ— æ³•ä¼ é€’å‚æ•°é—®é¢˜ã€?br />
ä½ ç»†çœ‹@1å’Œ@2å¤?当å‰çš„代ç å®žçŽ°æ˜¯æ— æ³•æŠ?pre"å’?next"傿•°ä¼ 递过去,于是åQŒå½“ä½ è¿è¡Œä¾‹å,点击上一™å‰|ˆ–下一™åµï¼Œéƒ½æ˜¯æ²¡ä¿¡æ¯alert出æ¥çš„ï¼
˜q™ç§æƒ…况åQŒæ˜¯å¾ˆå¸¸è§çš„。那么,如何实现ž®†å‚æ•îC¼ ˜q‡åŽ»ã€?br />
ž®†@1处代ç 修改如下:
_a.onclick = function(){ //@1 当点å‡ÀL¤åQ?上一™å?åQ‰é“µé’®æ—¶æ‰§è¡Œ
testUse("pre"); //å‚看@3
this.changePage("pre");
}
˜q™æ ·åˆ›å¾ä¸€ä¸ªåŒ¿å函数赋予_a.onclick,也就是当_a对象的onclick事äšg触å‘åŽå°†æ‰§è¡Œæ¤åŒ¿å函敎ͼŒè€ŒåŒ¿å函数将帮忙调用testUse("pre")å’Œthis.changePage("pre")两个æ–ÒŽ³•åQ?br />
从而达æˆä¼ 递傿•°ã€?br />
修改代ç åQŒè¿è¡Œä¾‹ååŽç‚¹å‡»ä¸Šä¸€™åµåŽä¼šæ˜¾½Cºå¦‚下两个信æ¯ï¼Œä¸€ä¸ªæ˜¯testUseä¸è¾“出的信æ¯åQŒè¯æ˜Žäº†å®žçް傿•°ä¼ 递,å¦ä¸€ä¸ªå´æ˜¯è¿è¡Œé”™è¯¯æ½Cºã€?br />
˜q™æ˜¯æ‰§è¡Œthis.changePage("pre")æ–ÒŽ³•抛出æ¥çš„。它òq¶æ²¡åƒæˆ‘们预期想的è¿è¡Œã€?br />
从æ½Cø™Ž·åˆ°çš„ä¿¡æ¯æ˜¯ï¼Œå¯¹è±¡ä¸æ”¯æŒæ¤å±žæ€§æˆ–æ–ÒŽ³•åQˆå¦‚æžœæµè§ˆå™¨æŠ¥çš„æ˜¯ä¸æ–‡æ½Cºå°±å¯ä»¥çœ‹åˆ°“å¯¹è±¡ä¸æ”¯æŒæ¤æ–ÒŽ³•或属æ€?#8221;çš„æ½Cºï¼‰
回头看this.changePage("pre")æ–ÒŽ³•åQŒå¾ˆæ˜Žæ˜¾this是错误æ½CÞZ¸æ‰€æŒ‡çš„对象åQŒåœ¨æœ¬åº”ç”¨ä¸æŒ‡PagesSystem对象指针的引用,在应用丼‹®å®žæ˜¯å£°æ˜Žäº†this.changePage("pre")æ–ÒŽ³•åQŒä½†ä¸ÞZ»€ä¹ˆè¯´æ²¡æ¤æ–ÒŽ³•呢?åQŸï¼ŸåQ?br />
2ã€åœ¨é—®é¢˜1ä¸ï¼Œæˆ‘们已æˆåŠŸè§£å†³ä¼ é€’å‚æ•ŽÍ¼Œä½†PagesSystem对象的changePageæ–ÒŽ³•被è°å·äº†åQŸï¼ŸåQ?br />
å†å°†åˆšæ‰çš„代ç 修改如:
_a.onclick = function(){ //@1 当点å‡ÀL¤åQ?上一™å?åQ‰é“µé’®æ—¶æ‰§è¡Œ
testUse("pre"); //å‚看@3
alert(this.tagName);
this.changePage("pre");
}
å†è¿è¡Œä¾‹åï¼Œä½ ä¼šå‘现输出this.tagNameçš„å€égØ“ A, 它就是_a对象。噢åQŒæˆ‘çš„å¤©å•Šã€‚æ€Žä¹ˆä¼šè¿™æ øP¼ŸåQŸï¼Ÿ
哈哈..._a对象ž®±æ˜¯<a href=""/></a>˜q™ä¸ªhtml å…ƒç´ å¯¹è±¡åQŒè¿™é‡Œæ˜¯“上一™å?#8221;铵钮对象åQŒåŽŸåž‹ä¸å“ªæ¥changePageæ–ÒŽ³•啊,所以报错ï¼åQï¼
ä½ å¯ä»¥è¿™æ ïL†è§£ï¼Œçœ‹å¦‚下代ç ?
function PagesSystem(container){//æ¤åº”用ä¸çš„PagesSystem对象åQŒchangePageæ–ÒŽ³•的上下文对象,也å¯ä»¥ç§°ä¸ºå½’属者ã€?br />
//...çœç•¥å…¶å®ƒä»£ç
this.changePage = function(evtObj) { //æ ÒŽ®ç‚¹å‡»åŽä¼ ˜q‡æ¥çš„傿•°å†³å®šæ˜¯åŠ?或是å‡?
if(evtObj == "next") {
this.currentPage += 1;
alert("ä½ å·²æ‰§è¡Œž®†å½“å‰é¡µåŠ?åQŒçŽ°åœ¨å½“å‰é¡µæ˜¯ï¼š" + this.currentPage);
}else if(evtObj == "pre"){
//æ¤å¤„ä¸ä½œif(this.currentPage ==1) return;é™åˆ¶ä¸ÞZº†ä½“çŽ°å½“ä¼ å…¥çš„å‚æ•°ä¸?pre"æ—Óž¼Œä¸‹é¢çš„alert()一定会执行
this.currentPage -= 1;
alert("ä½ å·²æ‰§è¡Œž®†å½“å‰é¡µå‡?åQŒçŽ°åœ¨å½“å‰é¡µæ˜¯ï¼š" + this.currentPage);
}
};
//...çœç•¥å…¶å®ƒä»£ç
}
˜q™æ ·çš„代ç ï¼Œä½ å¾ˆå®ÒŽ˜“看出this是指PagesSystem, 那么我们¾l§ç®‹å¾€ä¸‹çœ‹
å‡è®¾ A对象的原型如ä¸?
function A() {//@4
//...
this.onclick;
this.doClick = function() { //点击
this.onclick();//执行
}
//...
}
å½“ä½ åœ¨PagesSystemæ–ÒŽ³•ä¸?br />
_a.onclick = function(){ //@1 当点å‡ÀL¤åQ?上一™å?åQ‰é“µé’®æ—¶æ‰§è¡Œ
testUse("pre"); //å‚看@3
alert(this.tagName);
this.changePage("pre");
}
写上˜q™æ ·çš„代ç åŽ,ä½ å¯ä»¥ç¦»è°Þp®¤ä¸º@4的代ç çš„æ¨¡æ ·æ˜¯å¦‚ä¸‹ï¼š
function A() {//@4
//...
this.onclick = function(){ //@1 当点å‡ÀL¤åQ?上一™å?åQ‰é“µé’®æ—¶æ‰§è¡Œ
testUse("pre"); //å‚看@3
alert(this.tagName); //@5
this.changePage("pre"); //@6
};
this.doClick = function() { //点击
this.onclick();//执行
}
//...
}
呵呵。。如果这æ ïLœ‹çš„è¯åQŒ@5,@6ä¸çš„this当然是指a对象åQŒæ²¡å¼‚义。那当然是没changePageæ–ÒŽ³•ã€?br />
3ã€é‚£ä¹ˆå¦‚何解册™¿™é—®é¢˜å‘¢ï¼ŸåQ?br />
很幸˜q,prototype.jsä¸çš„bindæ–ÒŽ³•ž®±å¯ä»¥è§£å†Œ™¿™æ ïLš„问题åQŒå®ƒ˜q˜è§£å†Ïxˆ‘ä»¬ä¸Šé¢æçš„ä¼ å‚æ•°é—®é¢˜ã€?br />
看bindå¤§ä¾ å¸…æ ·:
bind: function() {
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
var __method = this, args = $A(arguments), object = args.shift();
return function() {
return __method.apply(object, args.concat($A(arguments)));
}
}
bindæ–ÒŽ³•ä¸çš„thisž®±æ˜¯bindæ–ÒŽ³•的所属者(上下文)å¦? f.bind(),f是一个声明了的方æ³?那么bind æ–ÒŽ³•里的thisž®±æ˜¯f
å†ç»†çœ‹ï¼Œbindæ–ÒŽ³•其实åšçš„工作是返回一个匿å函æ•?æ¤åŒ¿å函数帮忙执行this所指的æ–ÒŽ³•åQˆbindæ–ÒŽ³•的所属者)åQŒå¦‚æžœä½ æœ‰å¦‚ä¸‹ä»£ç ?br />
function f(msg) {
this.functionName = "f method";
alert(msg);
alert(this.functionName);
}
button.onclick = f.bind(this, msg); //˜q™é‡Œçš„this指f, 在bindæ–ÒŽ³•ä¸ç”¨object = args.shift()获得åQŒè¿™æ ïLš„è¯ï¼Œå½“点击buttonåŽæ‰§è¡Œfæ–ÒŽ³•, fæ–ÒŽ³•ä¸çš„thisž®×ƒ¸ä¼šæ— 故被 button代替。^_^ä¸ç„¶åQŒä¼šæŠ¥é”™çš„啊åQŒbutton哪æ¥functionNameåQŒå‘µå‘?..
它既解决ž®†msg傿•°ä¼ è¿‡åŽ»ï¼ŒåŒæ—¶ž®†f¾l‘定到button环境下,bindæ–ÒŽ³•å¾—åå¯èƒ½ž®±æ˜¯˜q™æ„义å§ã€‚至于如何实现将f¾l‘定åQŒé 的就是applyæ–ÒŽ³•ã€?br />
applyè°œäh色彩ž®Þq”±ä½ 们自行åŽÀL开啦ï¼
介ç»äº†bindå¤§ä¾ ¾l™å¤§å®Óž¼Œæˆ‘的例垮±éº»çƒ¦ä½ 们自å·Þp°ƒé€šå®ƒå•¦ã€‚谢了。ã€?br />
‹Æ¢è¿Žäº¤æµæŒ‡æ£ã€?br />
备注åQ?nbsp;å¦‚éœ€è½¬è²æœ¬æ–‡åQŒè¯·æ³¨æ˜Žå‡ºå¤„