を役に立てば幸いに渡すものすべてに作用したいので、this
に。ただ、if
を省略:
今
function $(selector) {
var resultObject = {
hide: function() {
selector.style.visibility = "hidden";
}
};
return resultObject;
}
<input type="button" value="hide myself with my jquery " onclick="$(this).hide();" />
、あなたのセレクタ引数はDOM要素以外の何かが、CSSセレクタことができれば、あなたがそのデータ型の引数をテストする必要があります。 CSSセレクタは複数の要素を表すことができるので、それにも対処したい場合はループが必要です。ここで
は、あなたがこの機能を実装する方法の例です:
function $(selector) {
var nodes = typeof selector === "string"
? Array.from(document.querySelectorAll(selector))
: [selector];
var resultObject = {
hide: function() {
nodes.forEach(function (node) {
node.style.visibility = "hidden";
});
}
};
return resultObject;
}
<input type="button" value="hide all divs with my jquery "
onclick="$('div').hide();" />
<div>div 1</div>
<div>div 2</div>
次の課題はresultObjectに必要なすべての状態を置くことによって、あなたが行うことができます、このチェーン可能を作ることであろうを返し、すべての方法でそれを返します。
function $(selector) {
var resultObject = {
nodes: typeof selector === "string"
? Array.from(document.querySelectorAll(selector))
: [selector],
hide: function() {
resultObject.nodes.forEach(function (node) {
node.style.visibility = "hidden";
});
return resultObject;
},
text: function (txt) {
resultObject.nodes.forEach(function (node) {
node.textContent = txt;
});
return resultObject;
},
color: function (colorCode) {
resultObject.nodes.forEach(function (node) {
node.style.color = colorCode;
});
return resultObject;
}
};
return resultObject;
}
<input type="button" value="color and put text in divs with my jquery "
onclick="$('div').color('red').text('clicked!');" />
<div>div 1</div>
<div>div 2</div>
あなたは$のすべての呼び出しでresultObjectを再作成するので、これは、最適ではありません。だからあなたはそのことを改善することができます。結果をフィルタリングしたり、選択したノードの下にある要素を見つけたりするなどの方法があります。
私たちは脱走しています。あなたがそれを知る前に、あなたは本当に図書館を書いています。;-)
機能を使用'onclick'で' this'のパラメータを渡します –
これはjQueryとは何が関係していますか? –
あなたはこの**奇妙な**コードを思いついたのですか? – vsync