XML ​กับ​ jQuery ​ความ​ลงตัวที่หาที่​ไหน​ไม่​ได้

วันนี้​จะ​มาขอพูด​ถึง​เรื่องการทำ​งานของ​ jQuery ​กับ​ XML ​จริงๆ​ ​แล้ว​ตัวของ​ Jquery ​สามารถ​ทำ​งาน​กับ​รูปแบบเอกสาร​ได้​หลายชนิด​ ​คือ
1. HTML
2. XML
3. JSON
4. Script

ซึ่ง​ผมมองว่าทุกตัว​ jQuery ​สามารถ​ทำ​ได้​ดีพอๆ​กัน​ ​เลยว่า​จะ​อธิบาย​ให้​หมด​ (ยกเว้น​ HTML) ​แต่​เนื่อง​ด้วย​…. ​เวลาอันน้อยนิดของผม​ ​ขอเอา​เป็น​รูปแบบยอดฮิตก่อนละ​กัน​ ​นั่นก็คืออะ​ไรน่า​จะ​เดา​กัน​ออก​ XML ​เพื่อนเลิฟไง​ ^_^

ซึ่ง​ใน​การคืนค่า​จาก​ Ajax ​บางครั้ง​ ​เราอาจ​จะ​ต้อง​ใช้​งาน​ XML ​กัน​บ้าง​ ​แน่นอนว่า​ Javascript ​ตามปกติ​เราก็พอ​จะ​ทำ​กัน​ได้​บ้าง​ ​แต่ว่ากว่า​จะ​ ​อ่านกว่า​จะ​ไต่​ node ​กว่า​จะ​แปลงล่างกลับมา​เป็น​ html ​โคดก็ปา​ไปเกือบ​ 100 ​บรรทัด​ ​ทีนี้ลองเปลี่ยนมา​ใช้​ jQuery ​กัน​บ้าง​ ​ว่า​จะ​ง่ายกว่า​ยัง​ไง

ใน​ที่นี้ตัวอย่าง​ XML ​ที่ผม​จะ​เอามาทดสอบ​ด้วย​คือ​ XML ​ที่​เป็น​รูปแบบ​ sitemap ​ที่​ Google ​อณุญาติ​ให้​เรา​ใช้​ทำ​การ​ submit ​ละ​กัน​ครับ

ไฟล์​ sitemap.xml




http://www.domainsample.com/chemical
2007-11-21
weekly
0.5


http://www.domainsample.com/admin
2007-11-21
weekly
0.5


http://www.domainsample.com/articles
2007-11-21
weekly
0.5


http://www.domainsample.com/alternative-energy-sources
2007-11-21
weekly
0.5


http://www.domainsample.com/acne-chemical-peel-scar
2007-11-21
weekly
0.5

ซึ่ง​จาก​ XML ​ด้านบนผม​จะ​ลองเอา​ jQuery ​ไปอ่านออกมา​ไว้​ใน​หน้า​เอกสาร​ html

readsitemap.html



jQuery



$(function() {
$.get('data/sitemap.xml', function(xml) {
$(xml).find('url').each(function() {
var txt = $(this).find('loc').text();
$('

').html( txt ).appendTo('#sitemap');
});
});
});




 


Your sitemap



 

เอาล่ะทีนี้​เราลองมาดู​โคดทีละ​ ​บรรทัด​กัน​เลย

ส่วนี้​เป็น​การเรียกไฟล์​ xml ​ออกมาครับ​ ​ให้​วิ่งไป​ให้​ถูก​ path ​เป็น​พอ​ ​เอากลับมา​เป็น​ data ​เก็บ​ไว้​ใน​ตัวแปร​ xml
$.get('data/sitemap.xml', function(xml)

ต่อมา​เป็น​การหาข้อมูล​ใน​ tag “url” ​ขึ้นมาวนลุป​โดย​ใช้​คำ​สั่ง​ each ​ซึ่ง​จาก​ตรงนี้​เราอาจ​จะ​เขียนแบบนีก็​ได้​ $(’url’, xml)……
$(xml).find('url').each(function() {

ต่อมา​เป็น​การไต่​ node ​ต่อ​จาก​ url -> loc ​แล้ว​ใช้​คำ​สั้ง​ text() ​เอาค่าออกมา
var txt = $(this).find('loc').text();

สุดท้าย​ได้​ค่ากลับมา​แล้ว​เอามา​เก็บลง​ใน​ li ​ก่อนที่​จะ​ไป​ append ​เข้า​ใน​ tag ​ที่มี​ id ​เป็น​ sitemap
$('

').html( txt ).appendTo('#sitemap');

 

เป็น​มั้ยครับง่ายโครตๆ​ ​และ​ยัง​มีอีกครับ​ ​ถ้า​ต้อง​การหา​ attribute ​ก็​แค่​ใช้​คำ​สั่ง​ get ​มันออกมา​เช่น
$(this).find(’loc’).attr(’someattr’).text();

หรือ​ถ้า​จะ​หาค่าค่าตั้งแต่​ element ​ที่​ 0 ​ขึ้นไปก็​ใช้
$(this).find(’loc:gt(0)’).text(); // ​กลับ​กัน​ใช้​ lt ​หาค่าน้อยกว่า

ง่ายมั้ย​กับ​ jQuey ​วันนี้​ ^_^

อ้างอิงจาก: http://www.jquerytips.com

edit @ 20 Dec 2007 07:53:20 by Pom & Ja







edit @ 10 Dec 2007 22:07:12 by Pom & Ja

 

จาก​คราวที่​แล้ว​ผมเขียนเกี่ยว​กับ​ Immutability ​ใน​ Best practise in Coding http://www.thaisharp.com/Forum/Topic.aspx?topic_id=5887
แล้ว​ผม​ได้​ทิ้งคำ​ถามเชิง​ไม่​เห็น​ด้วย​ไว้​ว่า
แล้ว​ You ​ได้​ concern ​เกี่ยว​กับ​ space ​และ​ time ​ที่​ต้อง​ใช้​เพื่อ​ allocate + GC ​ตัว​ immuable object ​ไหม
http://blogs.msdn.com/ericlippert/archive/2007/12/04/immutability-in-c-part-two-a-simple-immutable-stack.aspx
เค้า​ไม่​ตอบผม​ด้วย​ภาษาคนครับ​ ​เค้าตอบมา​ด้วย​โค้ด
ตัวอย่าง​จาก​การ​ Implement Immutable Stack
เค้าบอกว่า​ Immutable stack ​นั้น​มีประสิทธิภาพเทียบ​เท่า​หรือ​มากกว่า​ Mutable stack ​ใน​บางกรณีซะอีก
"55 ​ไม่​มีทาง​ ​ขำ​กลิ้ง" ​ผมนั่งหัวเราะ​ ​เพราะ​ว่า​ Stack ​ชื่อมันก็บอก​อยู่​แล้ว​ ​มัน​เป็น​อะ​ไรที่​ต้อง​ push pop ​ๆๆ
มัน​ต้อง​เปลี่ยนแปลง​ ​การที่​จะ​มานั่งสร้าง​ instance ​ใหม่​แล้ว​ copy state ​เดิม​นั้น​ ​มันช่าง​ idiot ​จริงๆ​(ที่​แท้ผมเอง)
แต่หลัง​จาก​นั่งดูตัวอย่างการ​ Implement stack ​แล้ว​ก็​ต้อง​อุทาน​เป็น​ Quantum TV "​โอ​ ​พระ​เจ้ากล้วย​ช่วย​จอร์จมันทอดมาก"

public interface IStack<T> : IEnumerable<T>
{
IStack<T> Push(T value);
IStack<T> Pop();
T Peek();

bool IsEmpty { get; }
}

public sealed class Stack<T> : IStack<T>
{
    private sealed class EmptyStack : IStack<T>
    {
        public bool IsEmpty { get { return true; } }
        public T Peek() { throw new Exception("Empty stack"); }
        public IStack<T> Push(T value) { return new Stack<T>(value, this); }
        public IStack<T> Pop() { throw new Exception("Empty stack"); }
        public IEnumerator<T> GetEnumerator() { yield break; }
        IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); }
    }
    
    private
static readonly EmptyStack empty = new EmptyStack();
    public static IStack<T> Empty { get { return empty; } }
    private readonly T head;
    private readonly IStack<T> tail;
    private Stack(T head, IStack<T> tail)
    {
        this.head = head;
        this.tail = tail;
    }
    public bool IsEmpty { get { return false; } }
    public T Peek() { return head; }
    public IStack<T> Pop() { return tail; }
    public IStack<T> Push(T value) { return new Stack<T>(value, this); }
    public IEnumerator<T> GetEnumerator()
    {
        for(IStack<T> stack = this; !stack.IsEmpty ; stack = stack.Pop())
            yield return stack.Peek();
    }
    IEnumerator IEnumerable.GetEnumerator() {return this.GetEnumerator();}
}

ถ้า​ Recursive function ​มี​ได้​แล้ว​ ​ทำ​ไม​ recusive data type ​จะ​มี​ไม่​ได้
การทำ​แบบนี้​ไอ้ตัว​ Empty stack ​นั้น​ก็​เหมือน​กับ​เป็น​ ​เงื่อนไขเริ่มต้น​ใน​ recusive function
แล้ว​ Overhead ​ใน​การสร้างมัน​จะ​มี​เท่า​กับ​ mutable ​ได้​อย่างไร

สังเกตดูว่า​ stack ​นี้​ share state ​รวม​กัน​คือ​ tail ​ของมัน​และ​ใน​เมื่อตัว​ stack ​เอง​เป็น​ immutable ​ดัง
นั้น​เราก้​ไม่​ต้อง​เป็น​ห่วงว่า​จะ​เกิด​ side effect ​จาก​การ​ share memory ​นี้
ซึ่ง​ทำ​ให้​ประหยัดมากกว่า​ mutable stack ​อีกแนะ

 

อ้างอิงจาก : http://www.thaisharp.net/Forum/Topic.aspx?topic_id=5923 

Aptana IDE

posted on 05 Dec 2007 23:46 by pommatt  in PHP

Aptana IDE - สุดยอด IDE สำหรับ JavaScript / Ajax Style โปรแกรมเมอร์

Aptana IDE เป็น โปรแกรมฟรีแวร์ และ ที่สำคัญ คือ เป็น โอเพนซอร์ส ที่รองรับการทำงานได้หลายๆ ระบบปฏิบัติการ มี สถาพ แวดล้อม ที่อำนวยความสะดวกสำหรับ นักพัฒนาเว็บไซต์ โดยเฉพาะอย่างยิ่งสำหรับ Javascript ภาษา HTML และ CSS นอกจาก นี้ยังมี ความสามารถเด่นๆ อื่น เช่น มีสภาพแวดล้อม ที่ง่าย ในการพัฒนาโปรแกรมที่เป็น ลักษณะของ AJAX

นอกจาก นี้ ยังมี ความสามารถ ของ Aptana ที่ติดมากกับ Aptana หรือ Plug-in ที่สามารถติดตั้งเพิ่มเติมได้
ค่อน ข้างง่าย อาทิเช่น PHP IDE ,  RUBY on Rails, Adobe AIR

ความสามารถต่างๆ ของ  Aptana

มีสภาพแวดล้อมที่ค่อนข้างยืดหยุ่นและง่ายสำหรับ จาวาสคริปส์ อาทิ เช่น action หรือ macro ต่างๆ.

 

 

รองรับ HTML DOM 0, 1 and 2

 

สามารถเลือกไลบรารีเพื่อใช้สำหรับ พัฒนาจาวาสคริปส์ อย่างอัตโนมัต แล้วก็ง่าย 

 

มีตัวอย่างรูปแบบ ของคำสั่งสำหรับ CSS  ในลักษณะของคำแนะนำสำหรับแต่ล่ะ คำสั่งด้วย

 

สามารถทำงานเป็น ไฟล์เดี่ยว หรือ โปรเจกส์ ได้ แล้วก็สามารถจัดการเรื่อง Workflow ได้ค่อนข้างง่าย ไม่มีปัญหากับ โปรแกรม

 

สำหรับ ความช่วยเหลือ ต่างๆ ใน Aptana นอกจาก จะค่อน ข้างละเอียดและครบสมบูรณ์ สำหรับ ตัว Aptana เองแล้ว ยัง มี Reference อื่นๆ ทีีค่อนข้างสมบูรณ์ใน Aptana ด้วย เช่น CSS, DOM, JavaScript , AIR , RUBY แม้กระทั่ง  Firebug ด้วย (อันนี้ผม ชอบมาก ปกติใช้ไม่ค่อย เป็น) อ้อ สำหรับ  Javascript แล้วก็ CSS ทั้ง CSS 1.0 แล้วก็ 2.0 มีการแนะนำที่เกี่ยวกับ Quirksmode ด้วย ว่ารองรับเวอร์ ชันแล้วก็ เว็บบราวเซอร์ตัว ใหน อย่างไร บ้าง

 

มีรูปแบบคำสั่ง หรือ ไกด์ต่างๆ ที่เกี่ยวกับคำสั่งต่างๆของ HTML หรือ คุณสมบัติต่างๆ ไปค่อนข้างครบแล้วก็สมบูรณ์

 

Aptana มาพร้อมกับ ไลบรารี ของจาวาสคริืปส์สำหรับ การพัฒนา จาวาสคริปส์ หรือ Ajax ที่ได้รับความนิยม ต่างๆ เกือบทั้งหมด อาทิื เช่น YUI, DOJO, Prototype , Scriptaculous , EXT , jQuery แล้วก็ อื่นๆ.

 

มีความช่วยเหลือในโปรแกรมสำหรับจาวาสคริปส์ ไลบรารี บางตัวด้วย.

 

แล้ว ก็ อื่นๆ (ขี้เกียจแปล แล้ว อิอิ)

A document outline shows CSS, JavaScript and HTML, all in the same outline!

 

Aptana flags errors and warnings in one view across HTML, CSS and JavaScript.

 

Integrated proxy support means Aptana can be used by those behind a firewall.

 

Walkthroughs provide help and the community can contribute new walkthroughs by adding them to the public wiki.

 

An overview page shows up-to-the minute news and information from various sources.

 

In-application help is pulled from the Aptana wiki and is easily edited and extended by the community.

 

อ้างอิงจาก: http://www.phpzealots.com