2011年3月30日 星期三

使用 jQuery 添加 HTML 程式片段

最近學到一個透過 jQuery 添加 HTML 程式片段的方法。原來 jQuery 除了讓我們搜尋 HTML DOM 以外,還可以輕易的建立 HTML 。

<html>
<head runat="server">
    <script src="http://code.jquery.com/jquery-1.5.js"></script>
    <script>
        $(function () {
            $("<div>這是我自建的 HTML </div>").appendTo($("#sp"));
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <span id="sp"></span>
    </div>
    </form>
</body>
</html>

以上面的程式為例:使用 $("<div>這是我自建的 HTML </div>"),建立了一個 <div> 物件,並將這物件指定擺放到 <span id="sp"></span>。


甚至更進一步,可以在我們自建的 HTML 裡,事先設定 jQuery 的變化。舉裡來說:

<html>
<head runat="server">
    <title></title>
    <script src="http://code.jquery.com/jquery-1.5.js"></script>
    <script>
        $(function () {
            $("<div>這是我自建的 HTML </div><div class='cs1'>指定顏色一</div><div class='cs2'>指定顏色二</div>").filter(".cs1").css("color","red").end().filter(".cs2").css("color","green").end().appendTo($("#sp"));
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <span id="sp"></span>
    </div>
    </form>
</body>
</html>

在自建的 HTML 中,針對
<div>這是我自建的 HTML </div>
<div class='cs1'>指定顏色一</div>
<div class='cs2'>指定顏色二</div>

分別針對 class=cs1 與 class=cs2 設定了 red 與 green 顏色,最後再塞到 <span> 裡。
.filter(".cs1").css("color","red").end().filter(".cs2").css("color","green").end().appendTo($("#sp"))


在實作的過程中,自己不小心將自建的 HTML 寫成:

原來,我把它寫成巢狀式(nested)的 <div> 了。它結果變成:

納悶的是,即便我寫成了巢狀式的語法,那又有什麼關係?可它就偏偏不如我願。後來發現了自己疏忽的地方,在於沒搞清出 jQuery 的 .filter() 與 .find() 的區別。這裡我很讚賞【钱途无梁】的文章「jQuery基础---filter()和find()」,裡面提的範例簡單明瞭。而我簡單的分別心得則是:

filter() :是找自己的兒子輩(就只到兒子輩而已)。
find()  :是找自己的孫子輩(不含兒子輩,但含曾孫、玄孫...)

所以,即便是面臨巢狀的情形,也不怕外漏了。

<html>
<head runat="server">
    <title></title>
    <script src="http://code.jquery.com/jquery-1.5.js"></script>
    <script>
        $(function () {
            $("<div>這是我自建的 HTML </div><div class='cs1'>指定顏色一<div class='cs2'>指定顏色二</div></div>").filter(".cs1").css("color", "red").end().filter(".cs2").css("color", "green").end().find(".cs1").css("color","red").end().find(".cs2").css("color","green").end().appendTo($("#sp"));
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <span id="sp"></span>
    </div>
    </form>
</body>
</html>

節錄【钱途无梁】的範例:

    <div class="css">
         <p class="rain">測試1</p>
    </div>
    <div class="rain">
         <p>測試2</p>
    </div>

如果執行:
    var $find = $("div").find(".rain");
    alert($find.html());

則結果是:

如果執行:
    var $filter = $("div").filter(".rain");
    alert($filter.html());

結果則是:






參考 01. jQuery基础---filter()和find()

沒有留言:

張貼留言