中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > 如何使用ajax開發(fā)web應(yīng)用程序
用MVC模型引導(dǎo)你的WEB設(shè)計(jì)思路 回到列表 asp編譯成dll-圖形化教程
 如何使用ajax開發(fā)web應(yīng)用程序

作者:Sheneyan 時(shí)間: 2006-02-07 文檔類型:翻譯 來自:藍(lán)色理想

第 1 頁 如何使用ajax開發(fā)web應(yīng)用程序 [1]
第 2 頁 如何使用ajax開發(fā)web應(yīng)用程序 [2]
第 3 頁 如何使用ajax開發(fā)web應(yīng)用程序 [3]
第 4 頁 如何使用ajax開發(fā)web應(yīng)用程序 [4]

作者: Jonathan Fenocchi
時(shí)間:2005.10.26
譯者:Sheneyan
英文原文:
http://www.webreference.com/programming/javascript/jf/column13/

在上一篇文章中,我們討論了如何通過javascript從一個(gè)遠(yuǎn)程XML文件中取得數(shù)據(jù)。在這篇文章中,我們將學(xué)會(huì)怎樣對數(shù)據(jù)作更復(fù)雜的處理。作為一個(gè)示例,我們會(huì)準(zhǔn)備一組XML數(shù)據(jù),將數(shù)據(jù)分割成獨(dú)立的片斷并以不同的方式展示這些片斷(取決于它們是如何被標(biāo)識(shí)的)。

這篇文章是建立在上一篇文章中構(gòu)造的示例代碼的基礎(chǔ)之上,所以如果你不能理解我們現(xiàn)在的代碼,你可以回過頭去讀第一篇文章(sheneyan注:就在上面)。

開始~

讓我們開始我們的第一步:構(gòu)造XML。我們準(zhǔn)備寫一個(gè)XML文檔,它組織了一系列準(zhǔn)備讓javascript處理的數(shù)據(jù),所以我們將一起組織一些節(jié)點(diǎn)和子節(jié)點(diǎn)(或者,元素和子元素)。在這個(gè)例子里,我們將使用一些家庭寵物的名字:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
   <pet>貓</pet>
   <pet>狗</pet>
   <pet>魚</pet>
  </pets>
</data>

在上面,我們有這個(gè)XML聲明(標(biāo)明這個(gè)文檔是一個(gè)XML 1.0 文檔,使用UTF-8編碼),一個(gè)根元素(<data>)將下面所有的元素組合在一起,一個(gè)<pets>元素組織了所有的寵物,然后一個(gè)<pet>節(jié)點(diǎn)對應(yīng)一只寵物。為了指定每一只寵物是什么類型的動(dòng)物,我們在<pet>元素中設(shè)置了文本節(jié)點(diǎn):貓,狗,魚。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="zh" dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>使用Ajax開發(fā)Web應(yīng)用程序 - 示例</title>
    <script type="text/javascript"><!--
    function ajaxRead(file){
      var xmlObj = null;
      if(window.XMLHttpRequest){
          xmlObj = new XMLHttpRequest();
      } else if(window.ActiveXObject){
          xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
      } else {
          return;
      }
      xmlObj.onreadystatechange = function(){
        if(xmlObj.readyState == 4){
          processXML(xmlObj.responseXML);
        }
      }
      xmlObj.open ('GET', file, true);
      xmlObj.send ('');
    }
    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pet');
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
        + 'Pets</th></tr>';
      for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td></tr>';
      }
      insertData += '</table>';
      document.getElementById ('dataArea').innerHTML = insertData;
    }
    //--></script>
  </head>
  <body>
    <h1>使用Ajax開發(fā)web應(yīng)用程序</h1>
    <p>這個(gè)頁面演示了AJAX技術(shù)如何通過動(dòng)態(tài)讀取一個(gè)遠(yuǎn)程文件來更新一個(gè)網(wǎng)頁的內(nèi)容--不需要任何網(wǎng)頁的重新加載。注意:這個(gè)例子對于禁止js的用戶來說沒有效果。</p>
    <p>這個(gè)頁面將演示如從取回并處理成組的XML數(shù)據(jù)。被取回的數(shù)據(jù)將會(huì)以表格形式輸出到底下。
<a href="#" onclick="ajaxRead('data_2.xml'); return false">查看演示</a>.</p>
    <div id="dataArea"></div>
  </body>
</html>

(Sheneyan注:完整代碼示例見 example_2.html ,XML文件見:data_2.xml

你會(huì)注意到我們和上次一樣以同樣的方式(通過一個(gè)超鏈接)調(diào)用了這個(gè)函數(shù),而且我們將數(shù)據(jù)放入一個(gè)DIV(這次這個(gè)東東叫做“dataArea”)。這個(gè)ajaxRead()函數(shù)和上次很接近,除了一點(diǎn)不同:onreadystatechange函數(shù)。讓我們先看一下這個(gè)函數(shù):

xmlObj.onreadystatechange = function(){
      if(xmlObj.readyState == 4){
          processXML(xmlObj.responseXML);
     }
}

我們?nèi)∠藆pdateObj函數(shù)并用一個(gè)叫做processXML()的新函數(shù)來代替它。這個(gè)函數(shù)將得到XML文檔本身(也就是被ajaxRead函數(shù)取回的)并處理它。(這“XML文檔本身”我指的是參數(shù)“xmlObj.responseXML”)

現(xiàn)在讓我們分析一下這個(gè)函數(shù)processXML。下面是它的代碼:

      function processXML(obj){
      var dataArray = obj.getElementsByTagName('pet');
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
      + 'Pets</th></tr>';
      for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td></tr>';
     }
     insertData += '</table>';
     document.getElementById ('dataArea').innerHTML = insertData;
   } 

首先,我們定義了一些變量!癲ataArray”作為所有<pet>節(jié)點(diǎn)的數(shù)組(不是節(jié)點(diǎn)數(shù)據(jù),只是節(jié)點(diǎn))。“dataArrayLen”是這個(gè)數(shù)組的長度,用于我們的循環(huán)!癷nsertData”則是一個(gè)表格的開頭的HTML。

我們的第二步則是遍歷所有的<pet>元素(通過變量“dataArray”)并將數(shù)據(jù)添加到變量insertData中。這里我們會(huì)創(chuàng)建一個(gè)表格行,插入一個(gè)表格數(shù)據(jù)節(jié)點(diǎn)(td)進(jìn)去,再將每一個(gè)<pet>元素的文本包含進(jìn)這個(gè)表格數(shù)據(jù)節(jié)點(diǎn),并將這些都添加進(jìn)變量“insertData”。因此,每循環(huán)一次,變量insertData將添加一行包含三個(gè)寵物中之一名稱的新數(shù)據(jù)。

新數(shù)據(jù)行添加完后,我們插入一個(gè)“</table>”結(jié)束標(biāo)簽到變量“insertData”。這完成了這個(gè)表格,然后我只剩這最后一步來達(dá)成我們的目標(biāo):我們需要將這個(gè)表格放到頁面上。幸運(yùn)的是,我們得感謝innerHTML屬性,這很簡單。我們通過函數(shù)document.getElementById()取得DIV“dataArea”并將變量“insertData”中的HTML插進(jìn)去。嗯,這個(gè)表格冒出來了!

我們繼續(xù)之前……

我得指出兩點(diǎn):

首先,你會(huì)注意到我們并沒有使用節(jié)點(diǎn)<pets>。這事因?yàn)槲覀冎挥幸粋(gè)數(shù)據(jù)組(<pets>)以及后來所有的元素(每一個(gè)<pet>元素);這些子節(jié)點(diǎn)包含了不同的數(shù)據(jù)但它們有相同的名字。在這個(gè)例子中,這個(gè)節(jié)點(diǎn)能夠被忽略。然而,將所有的元素<pet>放進(jìn)<pets>元素還是比較好,而不是讓這些<pet>元素自己散放(但仍然在data元素里面)。

另外一種方式是給每一個(gè)寵物放一個(gè)指定的標(biāo)簽,比如:

 <?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <貓 />
    <狗 />
    <魚 />
  </pets>
</data> 

然后我們能夠遍歷元素<pets>里的節(jié)點(diǎn)。這個(gè)processXML函數(shù)看起來就像這樣:

    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pets')[0].childNodes;
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
     + 'Pets</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
       if(dataArray[i].tagName){
          insertData += '<tr><td>' + dataArray[i].tagName + '</td></tr>';
       }
    }
    insertData += '</table>';
    document.getElementById ('dataArea').innerHTML = insertData;
  }

(Sheneyan注:修改后的示例見:example_2_1.html ,XML文件見:data_2_1.xml

這里所作的修改就是我們指向了<pets>組元素(這個(gè)“[0]”意味這是第一個(gè),即使它就是唯一的那一個(gè))以及它的子節(jié)點(diǎn)(元素<貓 />,<狗 />,<魚 />)。因?yàn)槲谋驹胤指盍诉@幾個(gè)元素(空格被認(rèn)為是一個(gè)節(jié)點(diǎn)),我們需要確定只有那些有標(biāo)簽名的節(jié)點(diǎn)(嗯,也就是只有標(biāo)簽)通過。然后我們輸出每一個(gè)標(biāo)簽的名字。因?yàn)槊恳粋(gè)標(biāo)簽名是一個(gè)寵物,我們不需要取得每一個(gè)節(jié)點(diǎn)的數(shù)據(jù)-節(jié)點(diǎn)名本身已經(jīng)足夠。去看一下它是怎么工作的吧。

還有另外一種方式來完成我們上面的工作,就是給每一個(gè)<pet>節(jié)點(diǎn)設(shè)置一個(gè)屬性值。你的XML文檔看起來就像這樣:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <pet type="貓" />
    <pet type="狗" />
    <pet type="魚" />
  </pets>
</data> 

你只需要稍微修改一下你的processXML函數(shù),它變成這樣子了:

    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pet');
      var dataArrayLen = dataArray.length;
      var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
      + 'Pets</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].getAttribute('type') + '</td></tr>';
      }
      insertData += '</table>';
      document.getElementById ('dataArea').innerHTML = insertData;
   }

(Sheneyan注:修改后的示例見:example_2_2.html  ,XML文件見:data_2_2.xml

關(guān)鍵的不同在于我們通過dataArray[i].getAttribute('type')取得值,它返回了當(dāng)前<pet>節(jié)點(diǎn)的“type”屬性的值。

繼續(xù)...

現(xiàn)在我們已經(jīng)知道了一些從一個(gè)單獨(dú)的XML數(shù)據(jù)組中取回?cái)?shù)據(jù)的有效方法,讓我們看看如何從多個(gè)組中取回?cái)?shù)據(jù)。和只是列出一個(gè)pets所擁有的內(nèi)容不同,我們假設(shè)我們有一個(gè)針對我們寵物的日課表。因?yàn)樗鼈兌加胁煌男枰,每一只寵物都得仔?xì)的照顧。面對這種情況,動(dòng)物的看管員需要一個(gè)每日依據(jù),F(xiàn)在來讓我們將這些放入一個(gè)良好格式的XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <pet>Cat
      <task>Feed</task>
      <task>Water</task>
      <task>Comb out fleas</task>
    </pet>
    <pet>Dog
      <task>Feed</task>
      <task>Water</task>
      <task>Put outside</task>
    </pet>
    <pet>Fish
      <task>Feed</task>
      <task>Check oxygen, water purity, etc.</task>
    </pet>
  </pets>
</data>

也許這個(gè)看起來很奇怪,但這就是我們正在創(chuàng)建的子組(sub-group)。每一個(gè)<pet>元素都是一個(gè)組<pets>的子組,而每一個(gè)<task>則是每一個(gè)<pet>組的子元素。

在我繼續(xù)之前,你也許希望將你的表格用一些css美化一下,比如:

  <style type="text/css"><!--
  table, tr, th, td {
    border: solid 1px #000;
    border-collapse: collapse;
    padding: 5px;
 }
--></style>

這讓這個(gè)表格更容易讀取,F(xiàn)在讓我們?nèi)パ芯亢瘮?shù)processXML:

  function processXML(obj){
    var dataArray = obj.getElementsByTagName('pet');
    var dataArrayLen = dataArray.length;
    var subAry, subAryLen;
    var insertData = '<table><tr><th>'
      + 'Pets</th><th>Tasks</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
          insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td>';
          subAry = dataArray[i].getElementsByTagName('task');
          subAryLen = subAry.length;
          insertData += '<td>';
            for(var j=0; j<subAryLen; j++){
              insertData += subAry[j].firstChild.data;
              if( subAryLen != j+1 ) { insertData += ', '; }
            }
        insertData += '</td></tr>';
  }
  insertData += '</table>';
  document.getElementById ('dataArea').innerHTML = insertData;
}

(Sheneyan注:修改后的示例見:example_2_3.html ,XML文件見:data_2_3.xml

新增加的內(nèi)容,首先是兩個(gè)新變量的聲明:“subAry”和“subAryLen”。它們和之前的變量“dataArray”和“dataArrayLen”類似,除了它們指向不同的數(shù)組(特別是它們將指向那些“task”元素-當(dāng)“dataArray”和“dataArrayLen”指向“pet”元素的時(shí)候)。

我們也改變了變量“insertData”的初始值-我們增加了一個(gè)表格頭(<th>)給我們的“tasks”字段。

下一步改變在于循環(huán):我們把值賦給subAry和subAryLen變量。變量subAry成為當(dāng)前<pet>的<task>元素的數(shù)組。變量subAryLen成為這個(gè)數(shù)組的長度,直到這個(gè)數(shù)組發(fā)生變化(當(dāng)外部循環(huán)走到下一個(gè)<pet>時(shí))。

我們創(chuàng)建了一個(gè)內(nèi)嵌的循環(huán)來處理所有的<task>元素,一次一個(gè)。大概來說,我們創(chuàng)建一個(gè)新的數(shù)據(jù)格,放進(jìn)一個(gè)用逗號(hào)分隔的任務(wù)列表,然后關(guān)閉數(shù)據(jù)表格以及當(dāng)前行。尤其,這些<task>元素節(jié)點(diǎn)數(shù)據(jù)(任務(wù)本身,比如,“喂食”)放置入變量“insertData”里的數(shù)據(jù)格。

接下來,我們檢驗(yàn)當(dāng)前<pet>是否有其它更多的task。如果還有,我們增加一個(gè)逗號(hào)(,)到變量insertData來讓每一個(gè)任務(wù)使用一個(gè)逗號(hào)分隔(“a, b, c”,而不是“a, b, c,”-注意,最后一個(gè)逗號(hào)在第二個(gè)任務(wù)那里,所以我們不需要)。這個(gè)工作在我們?nèi)〉胹ubAry數(shù)組長度的時(shí)候(給循環(huán)的“j”變量加1)就完成了。因?yàn)檫@個(gè)循環(huán)會(huì)在下一個(gè)循環(huán)的時(shí)候把變量“j”遞增1,“j”會(huì)比它這次檢驗(yàn)時(shí)還多1。因此,如果“j+1”(或者,“當(dāng)循環(huán)再次開始的時(shí)候j的值”)等于subAryLen(當(dāng)前<pet>節(jié)點(diǎn)的<task>節(jié)點(diǎn)數(shù)目),這個(gè)循環(huán)將停止。如果循環(huán)不再運(yùn)行,我們就不再添加新的逗號(hào)來分隔任務(wù)。所以如果“j+1”不等于subAryLen,我們直到我們可以安全的加入逗號(hào)到“insertData”,為下一個(gè)<task>作準(zhǔn)備。

一旦內(nèi)循環(huán)結(jié)束,我們關(guān)閉task數(shù)據(jù)格以及pet行。外部循環(huán)會(huì)重新開始創(chuàng)建一個(gè)新行以及移動(dòng)到下一個(gè)<pet>。這個(gè)處理一直進(jìn)行到所有的<pet>元素(以及每一個(gè)pet的所有<task>元素)都被處理完。

有其他方法嗎?

你也許會(huì)想:“那javascript變得相當(dāng)復(fù)雜了,但它只會(huì)隨著XML越來越復(fù)雜而跟著變復(fù)雜,也許我們能夠簡化XML,然后,簡化javascript”。如果你這么想,很棒,因?yàn)槟阃耆_。我之前展示的不同方法之一,我詳細(xì)說明的那個(gè)也許能夠成為最合適的。我們怎么使用屬性來對應(yīng)每一只寵物以及相應(yīng)任務(wù)?XML看起來會(huì)變成怎樣?

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <pet type="Cat" tasks="Feed, Water, Comb out fleas" />
    <pet type="Dog" tasks="Feed, Water, Put outside" />
    <pet type="Fish" tasks="Feed, Check oxygen, water purity, etc." />
  </pets>
</data>
 

哇哦!看起來簡單多了。讓我們看看我們的processXML函數(shù)如何修改:

  function processXML(obj){
    var dataArray = obj.getElementsByTagName('pet');
    var dataArrayLen = dataArray.length;
    var insertData = '<table><tr><th>'
     + 'Pets</th><th>Tasks</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
        insertData += '<tr><td>' + dataArray[i].getAttribute('type')             + '</td>'
+ '<td>' + dataArray[i].getAttribute('tasks') + '</td></tr>';
    }
    insertData += '</table>';
    document.getElementById ('dataArea').innerHTML = insertData;
}

(Sheneyan注:修改后的示例見:example_2_4.html,XML文件見:data_2_4.xml

就像你猜的一樣,函數(shù)簡單多了。因?yàn)榇a變得簡單,它也會(huì)變得更有效率。和我們比較老的函數(shù)的唯一的不同在于這個(gè)變量insertData現(xiàn)在插入更多的HTML,尤其是兩個(gè)新變量“type”和“tasks”。就如我們較早之前所學(xué)的,那些屬性是我們從XML文檔的<pet>元素中取得的,而且每個(gè)pet的屬性都有不同的值。對于你自己修改這個(gè)XML文件以適應(yīng)你的進(jìn)度的變動(dòng)來說也許是最簡單的方法。例如,如果你最終把你的貓身上的跳蚤抓光了,你只要簡單從你的貓的每日任務(wù)表中把“減少跳蚤數(shù)量”刪除,然而在之前我們使用的XML中,實(shí)現(xiàn)起來也許會(huì)覺得糊里糊涂。

最后的XML格式化的方法是將兩部分混合,F(xiàn)在,我們將使用屬性和不同的標(biāo)簽。讓我們看一下示例XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <pets>
    <貓 tasks="喂食, 飲水, 減少跳蚤數(shù)量" />
    <狗 tasks="喂食, 飲水, 帶出去遛遛" />
    <魚 tasks="喂食, 檢查氧氣,水的純度,其它" />
  </pets>
</data> 

這也許是最便于理解的XML。讓我們分析一下我們?yōu)榱俗宲rocessXML函數(shù)運(yùn)作起來所作的變更:

function processXML(obj){
    var dataArray = obj.getElementsByTagName('pets')[0].childNodes;
    var dataArrayLen = dataArray.length;
    var insertData = '<table><tr><th>'
     + 'Pets</th><th>Tasks</th></tr>';
    for (var i=0; i<dataArrayLen; i++){
      if(dataArray[i].tagName){
        insertData += '<tr><td>' + dataArray[i].tagName + '</td>'
            + '<td>' + dataArray[i].getAttribute('tasks') + '</td></tr>';
      }
  }
  insertData += '</table>';
  document.getElementById ('dataArea').innerHTML = insertData;
}

(Sheneyan注:修改后的示例見:example_2_5.html,XML文件見:data_2_5.xml

“dataArray”現(xiàn)在指向了<pets>的子節(jié)點(diǎn),將它們作為一個(gè)數(shù)組對待(換句話說,dataArray現(xiàn)在是在<pets>節(jié)點(diǎn)內(nèi)所有節(jié)點(diǎn)的數(shù)組)。這事因?yàn)槊恳粋(gè)標(biāo)簽都不同(<貓 />,<狗 />,<魚 />),所以我們不能使用這些元素的名稱來搜索它們(而之前我們可以使用<pet>,因?yàn)樗械脑囟际?lt;pet>)。

還是一樣,每個(gè)節(jié)點(diǎn)之間的有空格,所以在我們的處理過程中得排除掉文本節(jié)點(diǎn)。我們能夠檢驗(yàn)標(biāo)簽名是否存在-文本節(jié)點(diǎn)是節(jié)點(diǎn)但沒有標(biāo)簽,而<貓 />,<狗 />,<魚 />節(jié)點(diǎn)都是標(biāo)簽。所以如果一個(gè)標(biāo)簽有名字,那我們能夠?qū)?shù)據(jù)插入變量insertData。我們插入的數(shù)據(jù)是一個(gè)表格并有兩個(gè)表格數(shù)據(jù)格。這第一個(gè)單元格是標(biāo)簽名,也就是寵物的類型(貓,狗或魚),而第二個(gè)單元格則是指定動(dòng)物的“tasks”屬性值(比如“喂食或飲水”)。

結(jié)束語

在這篇文章里,我演示了這個(gè)例子的很多變化,你可以隨意試驗(yàn)它們來檢驗(yàn)?zāi)膫(gè)更適合你。只要記住一點(diǎn),XML是“可擴(kuò)展的”,所以沒有“錯(cuò)誤的”方法來組合你的數(shù)據(jù),雖然經(jīng)常有一個(gè)“最好的”方法。而且,要注意讓你的XML保持格式良好。記住很多問題來自于忘記結(jié)束一個(gè)標(biāo)簽(比如<狗 />而不是<狗>;除非這個(gè)節(jié)點(diǎn)中有數(shù)據(jù),比如下面的<狗>這里有數(shù)據(jù)哦</狗>)。

我意圖使XML和javascript的應(yīng)用不糊涂而變得明朗。一步步的學(xué)習(xí)處理更多的數(shù)據(jù),你能夠?qū)jax運(yùn)用于更大的用途。我希望看到ajax更多的應(yīng)用于企業(yè)網(wǎng)站,及其它。所以如果你將這些知識(shí)應(yīng)用于實(shí)踐,我很高興了解到你學(xué)到了什么(mail:jona#slightlyremarkable.com #換成@)。


關(guān)于作者

Jonathan Fenocchi(mail:jona#slightlyremarkable.com #換成@)是一個(gè)網(wǎng)絡(luò)開發(fā)者,主攻web設(shè)計(jì),客戶端腳本,php腳本。
他的網(wǎng)站位于http://www.slightlyremarkable.com

出處:藍(lán)色理想
責(zé)任編輯:moby

上一頁 如何使用ajax開發(fā)web應(yīng)用程序 [1] 下一頁 如何使用ajax開發(fā)web應(yīng)用程序 [3]

◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
淺談flash web的結(jié)構(gòu)
設(shè)計(jì)五原則
Web 表單設(shè)計(jì)原則和實(shí)踐
關(guān)于中英文正文字體比較
網(wǎng)站程序員如何應(yīng)對web標(biāo)準(zhǔn)
作者文章 更多作者文章
客戶端模版的應(yīng)用
[js效果] 圖片加載進(jìn)度實(shí)時(shí)顯示
javascript的函數(shù)
ajax的缺點(diǎn)
用Google Sitemaps幫助你SEO
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開啟
國際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡單繪制一個(gè)可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開發(fā)項(xiàng)目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:2/41個(gè)記錄/頁 轉(zhuǎn)到 頁 共4個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會(huì)員,你可以注冊 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報(bào)告錯(cuò)誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計(jì)》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2