1. HTML タグの暗黙的な作成
<input type="hidden" name="tc_id" value="{{tc_id}}">
このメソッドは通常、ajax で使用され、上記の値はEngine
2.window['data']
window["name"] = "the window object";
3 のテンプレートを使用します。localStorage、cookie などを使用して
window.localStorage.setItem("name", "xiaoyueyue"); window.localStorage.getItem("name");
機能を保存します: cookie、localStorage、sessionStorage 、indexDB
機能 | cookie | localStorage | sessionStorage | indexDB |
---|---|---|---|---|
データ ライフ サイクル | 通常はサーバーによって生成され、有効期限を設定できます | クリアしない限り常に存在します | ページを閉じるとクリア | クリアしない限り常に存在 |
4K | 5M | 5M | 無制限 | |
毎回ヘッダーに組み込まれ、影響を与えますリクエストのパフォーマンス | 参加しません | 参加しません | 参加しません |
はストレージとして推奨されなくなりました。大規模なデータ ストレージ要件がない場合は、localStorage
および sessionStorage
を使用できます。あまり変更のないデータの場合は、localStorage
を使用して保存してください。そうでない場合は、sessionStorage
を使用して保存してください。 注:
型のデータを保存する場合、このディープ コピー メソッドは関数と独自のカプセル化メソッドunknown
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">var obj = { type: undefined, text: "xiaoyueyue", methord: function() { alert("I am an methord"); } }; localStorage.setItem("data", JSON.stringify(obj)); console.log(JSON.parse(localStorage.getItem("data"))); // {text: "xiaoyueyue"}</pre><div class="contentsignin">ログイン後にコピー</div></div>
4 を無視します。アドレス バーの取得メソッド
-
function parseParam(url) { var paramArr = decodeURI(url) .split("?")[1] .split("&"), obj = {}; for (var i = 0; i < paramArr.length; i++) { var item = paramArr[i]; if (item.indexOf("=") != -1) { var tmp = item.split("="); obj[tmp[0]] = tmp[1]; } else { obj[item] = true; } } return obj; }
ログイン後にコピー2.正規表現メソッド
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; }
5.タグ バインディング関数のパラメータ渡し
<!--base--> <button id="test1" onclick="alert(id)">test1</button> <!--高级--> <button id="test" name="123" yue="xiaoyueyue" friend="heizi" onclick="console.log(this.getAttribute('yue'),this.getAttribute('friend'))" > test </button>
この拡張機能
これを使用してパラメータを渡します。art-template を使用しているときにそれを理解しました。ID を 1 つだけ渡して、それを複数のパラメータに結合する必要はもうありません。ハッピー!
var box = document.createElement("p"); box.innerHTML = "<button id='1' data-name='xiaoyueyue' data-age='25' data-friend='heizi' onclick='alertInfo(this.dataset)'>点击</button>"; document.body.appendChild(box); // name,age,friend function alertInfo(data) { alert( "大家好,我是" + data.name + ", 我今年" + data.age + "岁了,我的好朋友是" + data.friend + " !" ); }
ここで注意すべき点が 1 つあります。保存されたデータは、大文字 => を含む単語は一律に小文字に変換されます。たとえば、実際の値が
this の場合、 data-orderId = “2a34fb64a13211e8a0f00050568b2fdd” です。 dataset.orderid;
event
これを使用できるため、
event.target メソッドもイベントで使用できます: クラスに従って現在のインデックス値を取得します。パラメータはイベント オブジェクト
var getIndexByClass = function (param) { var element = param.classname ? param : param.target; var className = element.classname; var domArr = Array.prototype.slice.call(document.querySelectorAll('.' + className)); for (var index = 0; index < domArr.length; index++) { if (domArr[index] === element) { return index; } } return -1; },
6.HTML5 data-* カスタム属性
<button data-name="xiaoyueyue">点击</button>
var btn = document.querySelector("button"); btn.onclick = function() { alert(this.dataset.name); };
7です。文字列パラメータの受け渡し
単一パラメータ
var name = "xiaoyueyue", age = 25; var box = document.createElement("p"); box.innerHTML = "<button onclick=\"alertInfo('" + name + "')\">点击</button>"; document.body.appendChild(box); // name, age function alertInfo(name, age, home, friend) { alert("我是" + name); }
複数パラメータの受け渡し
var name = 'xiaoyueyue', age = '25', home = 'shanxi', friend = 'heizi', DQ = """; // 双引号的超文本标记语言 var params = """ + name + "","" + age + "","" + home + "","" + friend + """; var params2 = DQ + name + DQ + ',' + DQ + age + DQ + ',' + DQ + home + DQ + ',' + DQ + friend + DQ; var box = document.createElement("p"); box.innerHTML = "<button onclick='alertInfo(" + params + ")'>点击</button>"; console.log(box) document.body.appendChild(box); // name, age,home,friend function alertInfo(name, age, home, friend) { alert("我是" + name + ',' + "我今年" + age + "岁了!")
複雑なパラメータの受け渡し
var data = [ { name: "xiaoyueyue", age: "25", home: "shanxi", friend: "heizi" } ]; var box = document.createElement("p"), html = ""; for (var i = 0; i < data.length; i++) { html += "<button id='btn' onclick='alertInfo(id,\"" + data[i].name + '","' + data[i].age + '","' + data[i].home + '","' + data[i].friend + "\")'>点击</button>"; } box.innerHTML = html; document.body.appendChild(box); function alertInfo(id, name, age, home, friend) { alert("我是 " + name + " , " + friend + " 是我的好朋友"); }
8.arguments
argumentsオブジェクトはすべてです(矢印以外) 関数で使用できるローカル変数。引数オブジェクトを使用すると、関数内で関数のパラメーターを参照できます。配列のようなオブジェクトです。 [推奨学習:
フォームを使用すると、 ajax はシーケンスを転送します。パラメータ化 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// form表单序列化,摘自JS高程
function serialize(form) {
var parts = [],
field = null,
i,
len,
j,
optLen,
option,
optValue;
for (i = 0, len = form.elements.length; i < len; i++) {
field = form.elements[i];
switch (field.type) {
case "select-one":
case "select-multiple":
if (field.name.length) {
for (j = 0, optLen = field.options.length; j < optLen; j++) {
option = field.options[j];
if (option.selected) {
optValue = "";
if (option.hasAttribute) {
optValue = option.hasAttribute("value")
? option.value
: option.text;
} else {
optValue = option.attributes["value"].specified
? option.value
: option.text;
}
parts.push(
encodeURIComponent(field.name) +
"=" +
encodeURIComponent(optValue)
);
}
}
}
break;
case undefined: //fieldset
case "file": //file input
case "submit": //submit button
case "reset": //reset button
case "button": //custom button
break;
case "radio": //radio button
case "checkbox": //checkbox
if (!field.checked) {
break;
}
/* falls through */
default:
//don&#39;t include form fields without names
if (field.name.length) {
parts.push(
encodeURIComponent(field.name) +
"=" +
encodeURIComponent(field.value)
);
}
}
}
return parts.join("&");
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
Chestnut:
<form id="formData"> <p class="pop-info"> <label for="ordersaleCode">订单编号:</label> <input type="text" id="ordersaleCode" name="ordersaleCode" placeholder="请输入订单编号" /> </p> <p class="pop-info"> <label for="extractType">配送方式:</label> <select id="extractType" name="extractType" class="mySelect"> <option value="0" selected>配送</option> <option value="1">自提</option> </select> </p> </form> <button>获取参数</button>
document.querySelector("button").onclick = function() { console.log("param: " + serialize(document.getElementById("formData"))); // param: ordersaleCode=&extractType=0 };
10. 複雑なロジック パラメータ転送を処理するためのパブリッシュとサブスクライブ
最初にサブスクライブしてからパブリッシュする、最初にパブリッシュしてからパブリッシュすることをサポートします。 subscribe
メソッド ソース コード
var Event = (function() { var clientList = {}, pub, sub, remove; var cached = {}; sub = function(key, fn) { if (!clientList[key]) { clientList[key] = []; } // 使用缓存执行的订阅不用多次调用执行 cached[key + "time"] == undefined ? clientList[key].push(fn) : ""; if (cached[key] instanceof Array && cached[key].length > 0) { //说明有缓存的 可以执行 fn.apply(null, cached[key]); cached[key + "time"] = 1; } }; pub = function() { var key = Array.prototype.shift.call(arguments), fns = clientList[key]; if (!fns || fns.length === 0) { //初始默认缓存 cached[key] = Array.prototype.slice.call(arguments, 0); return false; } for (var i = 0, fn; (fn = fns[i++]); ) { // 再次发布更新缓存中的 data 参数 cached[key + "time"] != undefined ? (cached[key] = Array.prototype.slice.call(arguments, 0)) : ""; fn.apply(this, arguments); } }; remove = function(key, fn) { var fns = clientList[key]; // 缓存订阅一并删除 var cachedFn = cached[key]; if (!fns && !cachedFn) { return false; } if (!fn) { fns && (fns.length = 0); cachedFn && (cachedFn.length = 0); } else { if (cachedFn) { for (var m = cachedFn.length - 1; m >= 0; m--) { var _fn_temp = cachedFn[m]; if (_fn_temp === fn) { cachedFn.splice(m, 1); } } } for (var n = fns.length - 1; n >= 0; n--) { var _fn = fns[n]; if (_fn === fn) { fns.splice(n, 1); } } } }; return { pub: pub, sub: sub, remove: remove }; })();
ログイン後にコピーWeChat アプレットで使用される例:
// app.js App({ onLaunch: function(e) { // 注册 storage,这是第二条 wx.Storage = Storage; // 注册发布订阅模式 wx.yue = Event; } });
ログイン後にコピー
-
// 添加收货地址页面订阅 onLoad: function (options) { wx.yue.sub("addAddress", function (data) { y.setData({ addAddress: data }) }) } /** * 生命周期函数--监听页面隐藏 */ onHide: function () { // 取消多余的事件订阅 wx.Storage.removeItem("addAddress"); }, onUnload: function () { // 取消多余的事件订阅 wx.yue.remove("addAddress"); }
ログイン後にコピー// 传递地址页面获取好数据传递 wx.yue.pub("addAddress", data.info); // 补充跳转返回
ログイン後にコピー注: データ使用後のアンインストールには注意し、ページを閉じた状態で操作してください