if
条件でINPUT
.tagName
プロパティをフィルタリングすることにより、単一の.replace()
コールから<input>
の要素を除外し、 E40、TEXTAREA子要素とINPUT要素の子ノードをスキップし、テキストファイルと画像を含む要素が残っているテキストノードをそれぞれ置き換えます。
これにより、内部に要素を持つコンテナ要素のうち、変更しないままにする必要があるコンテナ要素のinnerHTML
を置き換える可能性のある問題を回避する必要があります。次のコードはIEとFirefoxで動作しますが、アプリケーションの完全なコンテキストでテストされていません。
function textToImages() // within document.body
{
var checkAny = /E0|E10|E20|E30|E40/g;
function filter(node)
{ checkAny.lastIndex=0;
if(checkAny.test(node.nodeValue))
{ switch(node.parentNode.tagName)
{ case "INPUT":
case "TEXTAREA":
return NodeFilter.FILTER_SKIP;
}
return NodeFilter.FILTER_ACCEPT;
}
return NodeFilter.FILTER_SKIP;
}
filter.acceptNode = filter; // cross browser compatability
var scan = document.createNodeIterator(
document.body,
NodeFilter.SHOW_TEXT,
filter,
false
);
var node, replaceList=[];
document.body.normalize();
while(node = scan.nextNode())
replaceList.push(node);
if(replaceList.length)
replaceList.forEach(replaceTextNode);
function replaceTextNode(node)
{ var html = node.nodeValue;
var span = document.createElement("span");
html=html.replace(/E0/g, '<img src="http://s31.postimg.org/5riz5vn0b/Zero.png" title="E"/>');
html=html.replace(/E10/g, '<img src="http://s31.postimg.org/6wm82qo8r/ten.png" title="E"/>');
html=html.replace(/E20/g, '<img src="http://s31.postimg.org/4j4abq9tn/twenty.png" title="E"/>');
html=html.replace(/E30/g, '<img src="http://s31.postimg.org/mzyp2jprv/thirty.png" title="E"/>');
html=html.replace(/E40/g, '<img src="http://s31.postimg.org/j4vazz6m3/forty.png"title="E"/>');
span.innerHTML = html;
node.parentNode.replaceChild(span, node);
}
}
NodeIteratorがあることをTEXTAREAやINPUT要素の子ノードされていないテキストを置換する含まれているもののためにフィルタリング、DOMのテキストノードをスキャンするために使用され、ノードの静的リストを作成しています処理される。
少なくとも4つのパラメータが必要なIEではdocument.createNodeIterator
に問題があり、3番目のパラメータが関数である必要があります。他のブラウザで問題が発生した場合は、NodeIterator
を使わないように、カスタムDOMトラバーサルとフィルタリングコードを書くことをお勧めします。
フィルタを通過したテキストノードは、0個以上のテキストノードと1つ以上のイメージ要素を含むSPAN
要素に置き換えられます。ノード置換機能は基本的に質問に掲示されたコードを使用します。コンテナを使用せずに、1つのテキストノードを1つ以上のテキストノードとイメージノードに置き換えることは可能ですが、DOM要素を作成して操作するには追加のコーディングが必要になります。
あなたがしようとしていることはまったくわかりません。私は英語がおそらくあなたの母国語ではない(ヒント:私は「排他的」は本当の言葉ではないと思う...)私は「it」という言葉を使わないだろう。その代名詞が何を指しているのかははっきりしていない。デベロッパーツールを使用してChromeブラウザでサンプルを試しましたか?私はあなたがスクリプトをロックするエラーがあると思います。 Chromeデベロッパーツールは、エラーの内容を正確に伝えます。また、JSFiddleを使用して、サンプル・コードで問題がどのようなものであるかを示すこともできます。 – zipzit
あなたはタグとタイトルの中にtextboxを記述していますが、コードのどこにでもテキストボックスは表示されません。あなたは何をしようとしているのですか?何をあなたのウェブページのユーザに見せようとしていますか? – zipzit
それはタイプミスでした。修正しました。> __> コードにエラーはありません。私はそれがテキストボックスの入力を無効にする必要があります。画像に置き換えられるテキストを含むテキストボックスは、次のようになります。 http://s31.postimg.org/b21q2ebej/screenshot_37.png テキストボックスの入力フィールドを非表示にする方法を理解できませんその過程でスクリプト全体がオフになります。 –