FxDOM
HTML DOM Bindings for the FxJS
Selector
<div class="container div1" active="true">
<ul class="list1">
<li class="item1">1</li>
<li class="item2">2</li>
<li class="item3">3</li>
</ul>
<div class="div2" active="true">
<ul class="list2">
<li class="item4">4</li>
<li class="item5">5</li>
</ul>
</div>
</div>
$, $.all
$
λ document.querySelector
λ₯Ό μ¬μ©νκ³ $.all
μ document.querySelectorAll
μ μ¬μ©ν©λλ€.
console.log($(".container li"));
console.log($.all(".container li"));
$.find, $.findAll
$.find
λ el.querySelector
λ₯Ό μ¬μ©νκ³ $.findAll
μ el.querySelectorAll
μ μ¬μ©ν©λλ€.
console.log($.find("li", $(".container div")));
console.log($.findAll("li", $(".container div")));
console.log($.find("li", $(".container")));
console.log($.findAll("li", $(".container")));
console.log($.findAll("ul li", $(".container")));
el.querySelector
λ el.querySelectorAll
μ μμ¬μ΄μ
el.querySelector
λ el.querySelectorAll
μ κ²½μ°λ μ
λ ν°μ μμμΌλ‘ >
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
try {
document.querySelector(".container").querySelectorAll("> ul li");
} catch (e) {
console.log(e);
}
el.querySelector
λ el.querySelectorAll
μ κ²½μ°λ μ
λ ν°μ μμμ΄ λΆλͺ¨λ ν¬ν¨νκ³ , μμμμλ ν¬ν¨νλ€λ μ μ μ μν΄μΌν©λλ€.
console.log(
document.querySelector(".container").querySelectorAll("[active=true] > ul li")
);
with >, with &
μλ μμ λ $.find
, $.findAll
μ el.querySelector
λ el.querySelectorAll
μ μ°¨μ΄λ₯Ό 보μ¬μ€λλ€.
$.find, $.findAll
μ >
λ₯Ό μ
λ ν°μ μμμΌλ‘ μ¬μ©ν μ μμ΅λλ€.&
λ₯Ό ν΅ν΄ λΆλͺ¨ elementμ λν΄μλ§ μΆκ° 쑰건μ λΆμΌ μ μμ΅λλ€.
console.log($.findAll("> ul li", $(".container")));
console.log($.findAll('&[active="true"] li', $(".container")));
console.log($.findAll('&[active="true"] > ul li', $(".container")));
console.log($.findAll('&[active="false"] li', $(".container")));
$.closest
μμ μ ν¬ν¨νμ¬ μ
λ ν°μ 맀μΉλλ λΆλͺ¨ μ리먼νΈλ₯Ό μ°Ύμ΅λλ€.
console.log($.closest("li", $(".item4")));
console.log($.closest("ul", $(".item4")));
console.log($.closest("div", $(".item4")));
console.log($.closest("div.container", $(".item4")));
$.children
$.prevAll
$.nextAll
$.prev
$.next
$.siblings
$.is
첫 λ²μ§Έ μΈμμ μ λ¬λ μ
λ ν°μ 맀μΉμ΄ λλμ§ νμΈν©λλ€.
console.log($.is(".item1", $("li:nth-child(1)")));
console.log($.is(".item1", $("li:nth-child(2)")));
$.contains
Create
$.els
console.log($.els('<span class="s1">1</span>'));
console.log($.els('<span class="s1">1</span><span class="s2">2</span>'));
$.el
console.log($.el('<span class="s1">1</span>'));
console.log($.el('<span class="s1">1</span><span class="s2">2</span>'));
Manipulation
$.appendTo
$.appendTo($(".comments"), $.el('<div class="comment">μ λκΈ</div>'));
$.prependTo
$.prependTo($(".posts"), $.el('<div class="post">μ κΈ</div>'));
$.append
$.append($.el('<div class="comment">μ λκΈ</div>'), $(".comments"));
$.prepend
$.prepend($.el('<div class="post">μ κΈ</div>'), $(".posts"));
$.before
$.insertBefore
$.after
$.insertAfter
$.replaceAll
$.replaceWith
$.remove
$.remove($(".post"));
$.text
console.log($.text($.el("<div>hi</div>")));
$.setText
console.log($.setText("ho", $.el("<div></div>")));
$.html
console.log($.html($.el("<div><span>hi</span></div>")));
$.setHTML
console.log($.setHTML("<span>ho</span>", $.el("<div></div>")));
$.outerHTML
console.log($.outerHTML($.el("<div><span>hi</span></div>")));
$.setOuterHTML
let el = $("#div1");
$.setOuterHTML('<div id="div1" class="hi2"></div>', el);
console.log($("#div1"));
$.val
console.log($.val($.el('<input type="text" value="hoho">')));
$.setVal
console.log($.setVal("hoho", $.el('<input type="text">')).value);
$.attr
console.log($.attr("type", $.el('<input type="text" value="hoho">')));
$.setAttr
console.log($.setAttr({ status: "ho" }, $.el('<div status="hi">')));
console.log(
$.setAttr({ status: "ho", class: "ye" }, $.el('<div status="hi">'))
);
console.log($.setAttr(["status", "ho"], $.el('<div status="hi">')));
console.log($.setAttr({ status: "" }, $.el('<div status="hi">')));
$.removeAttr
console.log($.removeAttr("status", $.el('<div status="hi">')));
$.prop
$.setProp
$.removeProp
CSS
$.addClass
console.log($.addClass("selected", $.el("div")));
console.log($.addClass("hi ho", $.el("div")));
console.log($.addClass("hi", $.el('<div class="ye">')));
$.removeClass
console.log($.removeClass("selected", $.el('<div class="selected"></div>')));
console.log($.removeClass("hi ho", $.el('<div class="hi ho"></div>')));
console.log($.removeClass("hi", $.el('<div class="ye hi">')));
$.toggleClass
console.log($.toggleClass("selected", $.el('<div class="selected"></div>')));
console.log($.toggleClass("selected", $.el("<div></div>")));
$.hasClass
console.log($.hasClass("selected", $.el('<div class="selected"></div>')));
console.log($.hasClass("a", $.el('<div class="b"></div>')));
$.css
$.setCss
$.show
$.hide
$.toggle
$.offset
console.log(
$.offset(
$.append(
$("body"),
$.setCss(
{
position: "absolute",
top: "20px",
left: "30px",
"margin-top": "50px",
},
$.el("div")
)
)
)
);
$.offsetParent
$.position
$.width
width
$.height
height
$.innerWidth
width + paddingLeft + paddingRight + borderLeft + borderRight
$.innerHeight
height + paddingTop + paddingBottom + borderTop + borderBottom
$.outerWidth
innerWidth + marginLeft + marginRight
$.outerHeight
innerHeight + marginTop + marginBottom
$.scrollTop
$.scrollLeft
$.setScrollTop
$.setScrollLeft
Event
$.on
$.on
μ el.addEventListener
λ₯Ό λμ ν©λλ€. $.on
μ μ΄λ²€νΈλ₯Ό λ±λ‘ν ν¨μλ₯Ό 리ν΄νλ©°, μ»€λ§ λ°©μμΌλ‘λ§ μ¬μ©ν μ μμ΅λλ€.
- μΈμλ‘ λ°μ ν¨μλ₯Ό μ‘°μνμ§ μκ³
el.addEventListener
μ κ·Έλλ‘ μ μ©νμ¬, κ°μ μ리먼νΈμ κ°μ μ΄λ²€νΈμ κ°μ ν¨μλ₯Ό λ±λ‘μ΄ λμ§ μλ el.addEventListener
μ νΉμ§μ κ·Έλλ‘ μ μ§νμ΅λλ€. el.addEventListener
μ capture
, passive
λ±μ μ΅μ
μ μ¬μ©ν μ μμ΅λλ€.e.preventDefault
, e.stopPropagation
μ μ¬μ©ν μ μμ΅λλ€.el.removeEventListener
μ $.off
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
<button type="button" id="btn1">
<span>btn1</span>
</button>
const addClickEvent = $.on("click", function (e) {
console.log(e.currentTarget);
console.log(e.target);
});
addClickEvent($("#btn1"));
addClickEvent($("#btn1"));
$.trigger("click", $("#btn1 span"));
$.on
μ λ λ²μ§Έ μΈμμ μ
λ ν°λ₯Ό μ λ¬νλ©΄ 맀μΉλλ μμμμμ μ΄λ²€νΈλ₯Ό λ±λ‘ν©λλ€. μ΄ λ°©μμ μμ λ°©μμ΄ μλλ©°, μμ el.addEventListener
μ μ£Όμ νΉμ§κ³Ό κΈ°λ₯μ λͺ¨λ μ¬μ©ν μ μμ΅λλ€.
<div class="articles">
<div class="article">
<button type="button" class="remove"><span>μμ </span></button>
</div>
<div class="article">
<button type="button" class="remove"><span>μμ </span></button>
</div>
</div>
const Articles = {
addEvents: pipe(
$.on("click", ".article:nth-child(1)", function (e) {
console.log(e.currentTarget);
}),
$.on(
"click",
".article",
function (e) {
console.log(e.currentTarget);
},
{ capture: true }
),
$.on("click", ".remove", function (e) {
console.log("other_data:", e.other_data);
console.log(e.currentTarget);
})
),
};
Articles.addEvents($(".articles"));
$.trigger("click", $(".articles .article:nth-child(1) .remove"));
$.trigger("click", $(".articles .article:nth-child(2) .remove"));
$.append(
$(".articles"),
$.el(`
<div class="article new">
<button type="button" class="remove"><span>μμ </span></button>
</div>
`)
);
Articles.addEvents($(".articles"));
$.trigger("click", $(".articles .article:nth-child(1) .remove"));
$.trigger("click", $(".articles .article:nth-child(3) .remove"));
$.trigger(
"click",
{ other_data: "hi" },
$(".articles .article:nth-child(3) .remove")
);
$.off
$.on
μ μ λ¬ν λͺ¨λ μΈμλ₯Ό λμΌνκ² μ λ¬νμ¬ μ΄λ²€νΈλ₯Ό μ§μΈ μ μμ΅λλ€.
<button type="button" id="btn2"></button>
const eventArgs = [
"click",
function () {
console.log("hi~");
},
];
$.on(...eventArgs)($("#btn2"));
$.off(...eventArgs)($("#btn2"));
$.trigger("click", $("#btn2"));
$.delegate
μ΄λ²€νΈ μμ λ°©μμΌλ‘ μ΄λ²€νΈλ₯Ό λ±λ‘ν©λλ€. μ΄λ²€νΈλ₯Ό λ±λ‘νκ³ μ νλ μ리먼νΈκ° λμ μΌλ‘ κ°νΈνκ² μ΄λ²€νΈλ₯Ό λ±λ‘ν΄λ μ μμ΅λλ€.
<div class="users"></div>
go(
$(".users"),
$.delegate("click", ".remove", function () {
console.log("remove user");
})
);
$.append(
$(".users"),
$.el(`
<div class="user new">
<button type="button" class="remove"><span>μμ </span></button>
</div>
`)
);
$.trigger("click", $(".users .remove"));
μ΄λ²€νΈ μμ λ°©μμ μλμ κ°μ μ΅μ
λ€μ μ¬μ©ν νμκ° μλ μν©μ ννμ¬ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€.
el.addEventListener
μ capture
, passive
λ±μ μ΅μ
μ μ¬μ©ν μ μμ΅λλ€.e.preventDefault
, e.stopPropagation
μ μ¬μ©ν μ μμ΅λλ€.el.removeEventListener
μ $.off
λ₯Ό μ¬μ©ν μ μμ΅λλ€.mouseleave
, mouseenter
λ μ μ λμνμ§ μμ΅λλ€.
don.jsμμλ μ΄λ²€νΈ μμ λ°©μμμ μ κΈ°λ₯λ€μ λͺ¨λ ꡬννμ¬ μ 곡νμ§λ§, μ¬μ€μ λΈλΌμ°μ μ μ΄λ²€νΈμ λν λͺ¨λ λμμ λΌμ΄λΈλ¬λ¦¬ μμ λ€μ ꡬννλ μ₯ν©ν μ½λλ€μ΄ νμνλ©°, κ²½νμ κ·Έ μ€μ©μ±μ΄ λ¨μ΄μ§λ€κ³ μκ°νμ¬ FxDOMμ ν΄λΉ κΈ°λ₯μ ꡬννμ§ μλ 컨μ
μΌλ‘ κ°κ³ μ ν©λλ€.
$.delegate + & μμ©
<div class="signup" agree="false">
<input type="checkbox" />
<button type="button">κ°μ
</button>
</div>
go(
$(".signup"),
$.delegate("change", "input", function (e) {
$.setAttr({ agree: e.currentTarget.checked }, e.delegateTarget);
}),
$.delegate("click", '&[agree="false"] button', function () {
console.log("λμν΄μ£ΌμΈμ!");
}),
$.delegate("click", '&[agree="true"] button', function () {
console.log("κ°μ¬ν©λλ€!");
})
);
$.trigger("click", $(".signup button"));
$.trigger("click", $(".signup input"));
$.trigger("click", $(".signup button"));
$.ready
Data
$.data, $.setData
<div class="item" data-fx-json='{"id": 1, "active": true}'></div>
<div class="item2"></div>
const { id, active } = $.data($(".item"));
console.log(id, active);
const data = $.data($.setData({ id: 1, active: false }, $(".item")));
console.log(data.active);
data.active = true;
console.log($.data($(".item")).active);
$.dataStr
const data = { id: 1, active: true };
const item = document.createElement(
`<div class="item" data-fx-json="${$.dataStr(data)}">`
);
const { id, active } = $.data(item);
console.log(id, active);
Fetch
$.get, $.post, $.put, $.delete
μ Content-Type
μ application/json
μΌλ‘ μ€μ λμ΄μμΌλ©° μλ΅μ΄ μ€λ©΄ JSON κ°μ²΄λ₯Ό λ°νν©λλ€. 4κ° ν¨μ λͺ¨λ νμ μΈμλ 2κ° μ΄μμ΄λ©°, μΈμλ₯Ό 1κ°λ§ μ λ¬νλ©΄ ν¨μλ₯Ό 리ν΄ν©λλ€.
$.get
$.get("/api/posts", { offset: 0, limit: 10 });
$.post
$.post("/api/posts", { content: "ho~" });
$.put
$.put(`/api/posts/${post.id}`, post);
$.delete
$.delete(`/api/posts/${post.id}`, undefined);