2008年7月20日 星期日

To jQuery or Not To, 『非 jQuery 習作』- 隨機文章跑馬燈

暫且不討論用 jQuery 來寫程式到底好不好, 因為我大概也沒有足夠的 JavaScript 資歷來討論這件事。不過, 倒是把前一陣子的『 jQuery 習作 - 隨機文章跑馬燈』改寫成不用 jQuery 的方式, 以下和大家分享。

.

最近, 自己寫的『相關文章點播台』外掛和其他功能暫告一段落, 轉而開始注意我的 Blogger 部落格的載入速度, 除了將大部分 JavaScript 加了 defer="defer" 屬性 (IE7似乎有問題), 也拿掉一些少用的 外部 JavaScript, 詳情可以參考以下的說明 :

.

再來, 把前一陣子的『 jQuery 習作 - 隨機文章跑馬燈』改寫成不用 jQuery 的方式。雖然原先 jQuery 的方式沒什麼問題, 但有了 LVCHEN 的提醒, 總是多一分準備會好一些。

...試著不用 jQuery 寫,其實對於學習 js 的幫助也不小,而且 jQuery 其實也有些 bug,太過依賴反而不好,碰到 bug 反而會花上更多時間。

=> LVCHEN 回應 『 jQuery 習作 - 隨機文章跑馬燈 』

.

模版修改方式、其他說明 以及 限制, 請見『 jQuery 習作 - 隨機文章跑馬燈』, 下面只列出 放在 HTML/JavaScript 網頁元素裡的 JavaScript

變數類別 :

  • DOM 物件 : eArch
  • DOM 物件陣列 : aPost, aHref, aTemp
  • 字串 : sTemp

其他注意事項 :

  • 紅色部分, 要搭配模版的架構, 還有 跑馬燈 的命名
  • 藍色部分 : i<20 可以改成其他的文章篇數,
  • 藍色部分 : /*/> */ 是因為輸入 HTML/JavaScript 網頁元素時, < > 必需成對, 用 &lt; 又無效, 所以只好用 JavaScript 註解的方式補成 i<20; /*/> */
  • 整段程式也可以放在模版, 但是 藍色部分 要改成
    for (var i=0; i &lt; 20; i++)

jQuery 的方式

不使用 jQuery 的方式

(IE7 不適用, 最後面有另一版本)

<!-- 記得先載入 jQuery -->

<script type="text/javascript">
function myScroller() {
var shortspc = ' ';
var longspc = ' ';
var p_lnk = $('#BlogArchive1').find('.posts').find('a');
var ll = p_lnk.length;
var j = Math.floor((ll) * Math.random());
$('#U002').html('').append('[' + j + '/' + ll + ']' + longspc);
for (var i=0; i<20; /*/> */ i++){
j = j+1;
j = j % p_lnk.length;
var d0=p_lnk.eq(j).attr("href");
d0 = d0.match(/\d{4}\/\d{2}/);
$('#U002').append(d0+shortspc);
p_lnk.eq(j).clone().appendTo('#U002');
$('#U002').append(longspc);
};
}

$(document).ready(function(e){
myScroller()
});
</script>

<script type="text/javascript">
function myScroller() {
var shortspc = ' ';
var longspc = ' ';
var eArch = document.getElementById('BlogArchive1');
var aPost = eArch.getElementsByClassName('posts');
var aHref = [];
var aTemp = [];
var sTemp = '';
var i,j;
for (i=0; i</*/>*/ aPost.length; i++) {
aTemp = aPost[i].getElementsByTagName('a');
for (j=0; j</*/>*/ aTemp.length; j++) {
aHref.push(aTemp[j]);
}}
var ll = aHref.length;
j = Math.floor((ll) * Math.random());
sTemp = sTemp.concat('[' + j + '/' + ll + ']' + longspc);
for (var i=0; i<20; /*/> */ i++){
j = j+1;
j = j % ll;
var d0=aHref[j].href;
d0 = d0.match(/\d{4}\/\d{2}/);
sTemp = sTemp.concat(d0+shortspc);
sTemp = sTemp.concat(aHref[j].parentNode.innerHTML+longspc);
};
document.getElementById('U002').innerHTML=sTemp;
}
myScroller();
</script>

.

IE7 不適用 getElementsByClassName 改寫如下 (綠色部份) :

<script type="text/javascript">
function myScroller() {
var shortspc = ' ';
var longspc = ' ';
var eArch = document.getElementById('BlogArchive1');
var aTemp = eArch.getElementsByTagName('a');
var aHref = [];
var sTemp = '';
var i,j;
for (i=0; i</*>*/ aTemp.length; i++) {
if (aTemp[i].href.match(/\d{4}\/\d{2}/))
if (!aTemp[i].href.match(/Id=BlogArchive1/i))
{ aHref.push(aTemp[i]); }
}

var ll = aHref.length;
var j = Math.floor((ll) * Math.random());
sTemp = sTemp.concat('[' + j + '/' + ll + ']' + longspc);
for (var i=0; i<20; /*/> */ i++){
j = j+1;
j = j % ll;
var d0=aHref[j].href;
d0 = d0.match(/\d{4}\/\d{2}/);
sTemp = sTemp.concat(d0+shortspc);
sTemp = sTemp.concat(aHref[j].parentNode.innerHTML+longspc);
};
document.getElementById('U002').innerHTML=sTemp;
}
myScroller();
</script>

0 意見:

發表您的回應

張貼留言