mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-09-30 22:41:23 +00:00
swap into all elements matching the out-of-band css selector
This commit is contained in:
parent
244b5de9a1
commit
038821cca8
25
src/htmx.js
25
src/htmx.js
@ -512,15 +512,22 @@ return (function () {
|
|||||||
swapStyle = oobValue;
|
swapStyle = oobValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var target = getDocument().querySelector(selector);
|
var targets = getDocument().querySelectorAll(selector);
|
||||||
if (target) {
|
if (targets) {
|
||||||
var fragment;
|
forEach(
|
||||||
fragment = getDocument().createDocumentFragment();
|
targets,
|
||||||
fragment.appendChild(oobElement); // pulls the child out of the existing fragment
|
function (target) {
|
||||||
if (!isInlineSwap(swapStyle, target)) {
|
var fragment;
|
||||||
fragment = oobElement; // if this is not an inline swap, we use the content of the node, not the node itself
|
var oobElementClone = oobElement.cloneNode(true);
|
||||||
}
|
fragment = getDocument().createDocumentFragment();
|
||||||
swap(swapStyle, target, target, fragment, settleInfo);
|
fragment.appendChild(oobElementClone);
|
||||||
|
if (!isInlineSwap(swapStyle, target)) {
|
||||||
|
fragment = oobElementClone; // if this is not an inline swap, we use the content of the node, not the node itself
|
||||||
|
}
|
||||||
|
swap(swapStyle, target, target, fragment, settleInfo);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
oobElement.parentNode.removeChild(oobElement);
|
||||||
} else {
|
} else {
|
||||||
oobElement.parentNode.removeChild(oobElement);
|
oobElement.parentNode.removeChild(oobElement);
|
||||||
triggerErrorEvent(getDocument().body, "htmx:oobErrorNoTarget", {content: oobElement})
|
triggerErrorEvent(getDocument().body, "htmx:oobErrorNoTarget", {content: oobElement})
|
||||||
|
@ -92,5 +92,31 @@ describe("hx-swap-oob attribute", function () {
|
|||||||
byId("d1").innerHTML.should.equal("Swapped");
|
byId("d1").innerHTML.should.equal("Swapped");
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('swaps into all targets that match the selector (innerHTML)', function () {
|
||||||
|
this.server.respondWith("GET", "/test", "<div>Clicked</div><div class='target' hx-swap-oob='innerHTML:.target'>Swapped</div>");
|
||||||
|
var div = make('<div hx-get="/test">click me</div>');
|
||||||
|
make('<div id="d1">No swap</div>');
|
||||||
|
make('<div id="d2" class="target">Not swapped</div>');
|
||||||
|
make('<div id="d3" class="target">Not swapped</div>');
|
||||||
|
div.click();
|
||||||
|
this.server.respond();
|
||||||
|
byId("d1").innerHTML.should.equal("No swap");
|
||||||
|
byId("d2").innerHTML.should.equal("Swapped");
|
||||||
|
byId("d3").innerHTML.should.equal("Swapped");
|
||||||
|
})
|
||||||
|
|
||||||
|
it('swaps into all targets that match the selector (outerHTML)', function () {
|
||||||
|
var oobSwapContent = '<div class="new-target" hx-swap-oob="outerHTML:.target">Swapped</div>';
|
||||||
|
this.server.respondWith("GET", "/test", "<div>Clicked</div>" + oobSwapContent);
|
||||||
|
var div = make('<div hx-get="/test">click me</div>');
|
||||||
|
make('<div id="d1"><div>No swap</div></div>');
|
||||||
|
make('<div id="d2"><div class="target">Not swapped</div></div>');
|
||||||
|
make('<div id="d3"><div class="target">Not swapped</div></div>');
|
||||||
|
div.click();
|
||||||
|
this.server.respond();
|
||||||
|
byId("d1").innerHTML.should.equal("<div>No swap</div>");
|
||||||
|
byId("d2").innerHTML.should.equal(oobSwapContent);
|
||||||
|
byId("d3").innerHTML.should.equal(oobSwapContent);
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ If the value is `true` or `outerHTML` (which are equivalent) the element will be
|
|||||||
|
|
||||||
If a swap value is given, that swap strategy will be used.
|
If a swap value is given, that swap strategy will be used.
|
||||||
|
|
||||||
If a selector is given, the first element matching that selector will be swapped. If not, the element with an ID matching the new content will be swapped.
|
If a selector is given, all elements matched by that that selector will be swapped. If not, the element with an ID matching the new content will be swapped.
|
||||||
|
|
||||||
### Notes
|
### Notes
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user