さて、jQueryプラグインの作成方法を発見しました。これにより、コードが大幅に整理されると思います。プラグイン関数に渡された一致する要素のセットにスタイルを追加するだけのチュートリアルをたくさん見てきました。
...しかし、関数を使用するときに新しい要素を追加したいと思います。私がこれをやりたいと言ってください:
$children
.addCousins()
.addClass("x")
.end()
.addClass("y");
だから私はこの関数を書いた、.addCousins()
。それが何をするのか、誰も知りませんが、理論的には機能することを知っています。が呼び出されたときに、要素を追加する方法(存在する場合)に頭を悩ませるだけです.addCousins()
。の各要素に$children
は、0個以上の「いとこ」が存在する可能性があります。これは.each()
、プラグイン機能で実行するときに追加する必要があります。
これが私がこれまでに持っているものです:
(function($){
$.fn.extend({
addCousins: function () {
return this.each(
function () {
var index = $(this)
.prevAll("td.radio")
.andSelf()
.length - 1;
$(this)
.prev("td[rowspan=2]")
.parent()
.next()
.children("td.radio")
.eq(index); // here is the "cousin" which should be added to the selection
}
);
}
});
})(jQuery);
私は一日中さまざまな解決策を試してきましたが、まだ進歩はありません。いとこの選択(心配する必要のない選択の実装)は、内部の無名関数で行われますが、ええ、私はここからどうやって行くのか本当にわかりません。
私が欲しいものについて多かれ少なかれ明確になったことを願っています。
#1を編集します。これがテスト可能なHTMLです(私は思います)...
<table>
<tr>
<td rowspan="2">Here are cousins</td>
<td class="radio">1</td>
<td class="radio">2</td>
<td class="radio">3</td>
</tr>
<tr>
<td class="radio">4</td>
<td class="radio">5</td>
<td class="radio">6</td>
</tr>
<tr>
<td rowspan="2">Here are NO cousins</td>
<td class="radio">7</td>
<td class="radio">8</td>
<td class="radio">9</td>
</tr>
</table>
...そして私の更新されたプラグイン機能。
(function($){
$.fn.extend({
cousins: function () {
this
.each(
function () {
var index = $(this)
.prevAll("td.radio")
.andSelf()
.length - 1;
$(this)
.prev("td[rowspan=2]")
.parent()
.next()
.children("td.radio")
.eq(index)
.addClass("cousin");
.end()
.end()
.end()
.end()
.end()
.prev()
.find("td[rowspan=2]")
.nextAll("td.radio")
.eq(index)
.addClass("cousin");
}
);
return $("td.cousin")
.removeClass("cousin");
}
});
})(jQuery);
テーブルセル2が選択されて渡された.cousins()
場合、テーブルセル4が返されます。テーブルセル4の場合はその逆。
#2を編集します。私の(まだ機能していない)更新:
cousins: function () {
var $cousins = $();
this
.each(
function () {
var index =
$(this)
.prevAll("td.radio")
.andSelf()
.length - 1;
var $next = null;
var $prev = null;
$next =
$(this)
.prev("td[rowspan=2]")
.parent()
.next()
.children("td.radio")
.get(index);
$prev =
$(this)
.parent()
.prev()
.find("td[rowspan=2]")
.nextAll("td.radio")
.get(index);
if ($next == null && $prev == null) {
$cousins.push($(this));
} else {
$cousins.push($next);
$cousins.push($prev);
}
}
);
return $cousins;
}