検索
ホームページウェブフロントエンドhtmlチュートリアルJS コンポーネント シリーズ - 徹底したコンポーネントのカプセル化: jquery data() と html 5 data-* 属性を使用して、components_html/css_WEB-ITnose を初期化します。

はじめに: 最近、ブートストラップ コンポーネントを使用する際のユーザビリティの問題を発見しました。多くの単純なコンポーネントの初期化では、バックグラウンドからデータを取得するだけでよいため、単純な select タグなどの多くの初期化コードを JS で記述する必要があります。オプションにありますが、バックグラウンドからデータを取得するには js 初期化が必要なので、ページが初期化されるとき、js 初期化コードには $("#id").combobox({url:"",valueField など) のような多くの型があります。 :" ",textField:""}); この種の繰り返しコードは非常に面倒に見えます。次に、ブートストラップ テーブルの data 属性を考えました。単純なコンポーネントを初期化するために HTML で直接 data-* を使用できれば素晴らしいでしょう。まずブートストラップ テーブルのドキュメントを見てみましょう:

ブートストラップ テーブルのほぼすべてのプロパティとイベントが data-* を使用して実行できることがわかります。これはかなり良いと思います。それからブロガーは調査を開始します。 data-* はどこから来たのでしょうか?

1. jquery data() についての予備調査

インターネットで検索した結果、データのソースが Jquery と html5 にあることがわかりました。まずは jquery の API を見てみましょう

本来の使い方は以下の通りです:

この関数は実際には非常に明白で、特定の属性とデータを要素に追加したり、値を取得したりすることです。

data() メソッドと html5 data-* 属性の組み合わせを見てみましょう

はは、これは良いことです。html5 の data-* で設定された値は、jquery の data() メソッドを使用して取得できます。ここでのルールは次のとおりです:

1) すべてのデータ属性は「data-」で始まる必要があります、

2) 属性は「-」で区切られます、

3) jquery で属性を取得するときは、「data」と「」を削除します。 -" "それでおしまい。

これを基礎として、タグに属性を設定し、対応する属性を js で取得する方法がわかりました。前回のコンボボックスのカプセル化例に基づいて説明します。

2. jquery data() は data-* 初期化コンポーネントを実装します

前の JS コンポーネント シリーズを思い出してください - 独自の JS コンポーネントをカプセル化する この記事では、 url を介してバックグラウンドからデータをフェッチできる単純なコンボボックスをカプセル化することもできます。したがって、以下では、このコンポーネントに基づいて、 data-* 属性を select タグに直接追加して、ドロップダウン ボックス コンポーネントを初期化するトリックをまだ行っています。

1. js コンポーネントのカプセル化コード

(function ($) {    //1.定义jquery的扩展方法combobox    $.fn.combobox = function (options, param) {        if (typeof options == 'string') {            return $.fn.combobox.methods[options](this, param);        }        //2.将调用时候传过来的参数和default参数合并        options = $.extend({}, $.fn.combobox.defaults, options || {});        //3.添加默认值        var target = $(this);        target.attr('valuefield', options.valueField);        target.attr('textfield', options.textField);        target.empty();        var option = $('<option></option>');        option.attr('value', '');        option.text(options.placeholder);        target.append(option);        //4.判断用户传过来的参数列表里面是否包含数据data数据集,如果包含,不用发ajax从后台取,否则否送ajax从后台取数据        if (options.data) {            init(target, options.data);        }        else {            //var param = {};            options.onBeforeLoad.call(target, options.param);            if (!options.url) return;            if (typeof options.param == "string"){                options.param = JSON.parse(options.param);            }            $.getJSON(options.url, options.param, function (data) {                init(target, data);            });        }        function init(target, data) {            $.each(data, function (i, item) {                var option = $('<option></option>');                option.attr('value', item[options.valueField]);                option.text(item[options.textField]);                target.append(option);            });            options.onLoadSuccess.call(target);        }        target.unbind("change");        target.on("change", function (e) {            if (options.onChange)                return options.onChange(target.val());        });    }    //5.如果传过来的是字符串,代表调用方法。    $.fn.combobox.methods = {        getValue: function (jq) {            return jq.val();        },        setValue: function (jq, param) {            jq.val(param);        },        load: function (jq, url) {            $.getJSON(url, function (data) {                jq.empty();                var option = $('<option></option>');                option.attr('value', '');                option.text('请选择');                jq.append(option);                $.each(data, function (i, item) {                    var option = $('<option></option>');                    option.attr('value', item[jq.attr('valuefield')]);                    option.text(item[jq.attr('textfield')]);                    jq.append(option);                });            });        }    };    //6.默认参数列表    $.fn.combobox.defaults = {        url: null,        param: null,        data: null,        valueField: 'value',        textField: 'text',        placeholder: '请选择',        onBeforeLoad: function (param) { },        onLoadSuccess: function () { },        onChange: function (value) { }    };    //这一段是新加的,在页面初始化完成之后调用初始化方法    $(document).ready(function () {        $('.combobox').each(function () {            var $combobox = $(this);            $.fn.combobox.call($combobox, $combobox.data());        })    });    })(jQuery);

コードの大部分は前回と変わりません

  //这一段是新加的,在页面初始化完成之后调用初始化方法    $(document).ready(function () {        $('.combobox').each(function () {            var $combobox = $(this);            $.fn.combobox.call($combobox, $combobox.data());        })    });

明らかに、コンポーネントはページの初期化が完了した後にスタイル セレクターを通じて初期化されます。それぞれを使用して、複数の .combobox スタイルがある場合は、それぞれを順番に初期化します。 $.fn.combobox.call($combobox, $combobox.data()); を通じて call メソッドを呼び出し、コンボボックスの初期化を呼び出します。 call メソッド内の 2 つのパラメーターは次のとおりです:

1) 現在初期化されている jquery オブジェクト

2 )パラメータリスト。 $combobox.data() を通じてここで取得できるのは、すべての HTML の data-* 属性です。すべての data-* 属性をパラメータとしてコンボボックスの初期化メソッドに渡します。

2. data-* を通じて HTML を初期化します

 <select id="Search_"         name="Search_province"         class="form-control combobox"         data-url="/Home/GetProvince"         data-param='{"type":"0"}'         data-text-field="Name"         data-value-field="Id"> </select>

data-* 属性を指定します。上記のことから、ここでの初期化は、スタイル selector.combobox を通じてコン​​ポーネントを初期化することであることがわかります。そのため、data-* を使用してコンポーネントを初期化したい場合は、class="combobox" スタイルを設定する必要があります。バックグラウンドで初期化が必要なタグを取得できること。

3. バックエンド C# メソッド

 public class HomeController : Controller {        public List<string> lstProvince = new List<string>() { "北京市", "天津市", "重庆市", "上海市", "河北省", "山西省", "辽宁省", "吉林省", "黑龙江省", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "海南省", "四川省", "贵州省", "云南省", "陕西省", "甘肃省", "青海省", "台湾省", "内蒙古自治区", "广西壮族自治区", "西藏自治区", "宁夏回族自治区", "新疆维吾尔自治区", "香港特别行政区", "澳门特别行政区" };        public JsonResult GetProvince(string type)        {            var lstRes = new List<Province>();            for (var i = 0; i < 10; i++)            {                var oModel = new Province();                oModel.Id = i;                oModel.Name = lstProvince[i];                lstRes.Add(oModel);            }           return Json(lstRes, JsonRequestBehavior.AllowGet);        }    }    public class Province    {        public int Id { get; set; }        public string Name { get; set; }    }

テストコード、言うことはありません。

4. エフェクトのデバッグ

エフェクトの取得

これで基本的に data-* によるコンポーネントの初期化が完了します。

3. 概要

上記は、html5 data-* 属性と組み合わせた jquery data() メソッドの使用法を簡単に示しています。基本的に、追加の js コード行を記述せずにタグを直接初期化するというブロガーのニーズを満たすことができます。 jquery.js および jquery.extension.js ファイルを使用する場合は、これらのファイルを直接参照できます。ただし、これは HTML5 の機能であるため、ブラウザーに特定の要件が必要であることはわかっています。もちろん、この使用関数は比較的初歩的なものですが、いくつかの単純なコンポーネントの初期化には十分です。記事に誤解がある場合は、ご指摘ください。ブロガーは感謝します。この記事があなたのお役に立ちましたら、小さな手を挙げて推薦をお願いします。ブロガーはこれからも頑張って、より良い記事を皆さんと共有していきます。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

HTMLとコード:用語を詳しく見るHTMLとコード:用語を詳しく見るApr 10, 2025 am 09:28 AM

htmlisaspecifictypeofcodefocuseduructuringwebcontent

HTML、CSS、およびJavaScript:Web開発者に不可欠なツールHTML、CSS、およびJavaScript:Web開発者に不可欠なツールApr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

HTML、CSS、およびJavaScriptの役割:コアの責任HTML、CSS、およびJavaScriptの役割:コアの責任Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLは初心者のために簡単に学ぶことができますか?HTMLは初心者のために簡単に学ぶことができますか?Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTMLでの開始タグの例は何ですか?HTMLでの開始タグの例は何ですか?Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

CSSのフレックスボックスレイアウトを使用して、メニューの点線のラインセグメンテーション効果のセンターアラインメントを実現する方法は?CSSのフレックスボックスレイアウトを使用して、メニューの点線のラインセグメンテーション効果のセンターアラインメントを実現する方法は?Apr 05, 2025 pm 01:24 PM

メニューで点線のラインセグメンテーション効果を設計する方法は?メニューを設計するときは、通常、皿の名前と価格の間に左右に合わせることは難しくありませんが、真ん中の点線またはポイントはどうですか...

オンラインコードエディターはコード入力を実装するためにどのようなHTML要素を使用していますか?オンラインコードエディターはコード入力を実装するためにどのようなHTML要素を使用していますか?Apr 05, 2025 pm 01:21 PM

WebコードエディターのHTML要素分析では、多くのオンラインコードエディターを使用すると、ユーザーはHTML、CSS、およびJavaScriptコードを入力できます。最近、誰かが提案した...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません