1
<div id = "board>
    <div>{abc</div>
    <div>def</div>
    <div>ghi}</div>
</div>

{または}であるかどうかを比較する前に、最初にすべてのcharをスパンラップすることで、すでにこれを行っています。しかし、それは遅すぎます。手順を逆にする必要があります。親 div に対する char の位置を取得することは可能ですか?

意図した出力は

<div id = "board>
    <div><span>{</span>abc</div>
    <div>def</div>
    <div>ghi<span>}</span></div>
</div>

contains()replace( )を使用するのはどうですか?

4

3 に答える 3

0

これがマークアップであると仮定します。

<div id="board">
    <div>{abc</div>
    <div>def</div>
    <div>ghi}<div>
</div>

そして、意図した出力は次のとおりです。

<div id="board">
    <span>abcdefghi</span>
</div>

次のように jQuery/javascript を使用してこれを行うことができます。

var textNodes = $("#board").find("div");
var text = "";

for(var i=0;i<textNodes.length;i++) {
    text = text + textNodes[i].text();
    $("#board").remove(textNodes[i]);
}

var spans = text.split("}");
var textToAppend = "";
for(i=0;i<spans.length - 1 ;i++)
    textToAppend = textToAppend + "<span>"+spans[i].split("{")[1]+"</span>";

$("#board").append(textToAppend);

これはあなたが探しているソリューションですか?

編集1:

の位置だけが必要な場合は、b を 2、d を 4 としましょう。

これがコードです。

var textNodes = $("#board").find("div");
var text = "";

for(var i=0;i<textNodes.length;i++) {
    text = text + textNodes[i].text();        
}

var codeBlocks = text.split("}");
var firstBlock = codeBlocks[0];

var getCharPosInBlock = function (character) {
     if(character === "}") return firstBlock.length;
     return firstBlock.indexOf(character);
}
于 2013-07-28T10:13:19.160 に答える
0

正規表現を使用したい場合:

var x = '<div id = "board>' + 
    '<div>{abc</div>' +
    '<div>def</div>' +
    '<div>ghi}</div>' +
    '</div>'; // or... get element by id 'board'

var rgx1 = /{/;
var rgx2 = /}/;

var y = x.replace(rgx1, "<span>{</span>");
y = y.replace(rgx2, "<span>}</span>");

{ または } が複数回出現すると思われる場合は、正規表現に "g" を追加できます。

var rgx1 = /{/g;
var rgx2 = /}/g;
于 2013-07-28T10:29:15.467 に答える
0

JavaScript ループを使用して必要な結果を得るには:

var textNodes = $("#board").find("div");

for(var i=0;i<textNodes.length;i++) {
    var value = textNodes[i].text()
    if(value.indexOf("{") > 0) 
         textNodes[i].text(value.replace("{", "<span>{</span>"));
    if(value.indexOf("}") > 0) 
         textNodes[i].text(value.replace("{", "<span>}</span>"));
}
于 2013-07-28T10:36:06.663 に答える