ありますが、例えばgetComputedStyle(elem)
からつかむことができdirection
CSSプロパティがあるが、これは唯一の要素レベルであるので、あなたはブラウザがtextNodesをレンダリングしました正確にどのように知ることができません。
だから、あなたが何をする必要があるかは、次のとおりです。
がライブデモで値取り戻す:今
function getDisplayedText(container) {
var r = document.createRange(); // to get our nodes positions
var nodes = []; // first grab all the nodes
var treeWalker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT, null, false);
while (treeWalker.nextNode()) nodes.push(treeWalker.currentNode);
var chars = []; // then get all its contained characters
nodes.forEach(n => {
n.data.split('').forEach((c, i) => {
r.setStart(n, i); // move the range to this character
r.setEnd(n, i+1);
chars.push({
text: c,
rect: r.getBoundingClientRect() // save our range's DOMRect
})
})
});
return chars.filter(c => c.rect.height) // keep only the displayed ones (i.e no script textContent)
.sort((a, b) => { // sort ttb ltr
if (a.rect.top === b.rect.top) {
return a.rect.left - b.rect.left;
}
return a.rect.top - b.rect.top;
})
.map(n => n.text)
.join('');
}
console.log('ko : ', getDisplayedText(ko));
console.log('ok : ', getDisplayedText(ok));
<div dir="rtl">
<p id='ko'>Hello (world)</p>
<p id='ok'>Hello <bdo dir='ltr'>(world)</bdo></p>
</div>
そして、WebKitのは最後)
をレンダリングしない理由としてフリップして、最初に...私は彼らが正しいかどうかは分かりません...