0

ユーザー選択に属するhtmlタグを知り、簡単に使用できるようにそれらを配列に入れる必要があるjavascriptアプリケーションを構築しています。

これを使用htmlTextすると、次のような文字列が得られました。

<h1><span style="color: rgb(102, 51, 153); font-weight: bold; text-decoration: underline;"><sub>test</sub></span></h1>

私は正規表現についてほとんど知識がなく、私が知っていることは私が望んでいることをしていないように見えるので、あなたの誰かがこの部分で私を助けてくれることを望んでいました.

では、上記の文字列を次の配列のように見せるにはどうすればよいでしょうか?

<h1>,
<span style="color: rgb(102, 51, 153); font-weight: bold; text-decoration: underline;">,
<sub>

これまでの私のコード(ただし、正しい軌道に乗っているかどうかはわかりません):

var fullhtml = SEOM_common.range.htmlText;//Get user selection + Surrounding html tags
var tags = fullhtml.split(SEOM_common.selected_value);//Split by user selection
var tags_arr = tags[0].match(/<(.+)>/);//Create array of tags

答えとコメントをありがとう。私は次のメソッドを構築することができました。これはまさに私が望むことを行います。

find_all_parents : function(selectRange,endNode){
   var nodes = [];
    var nodes_to_go = [];
    if(selectRange.commonAncestorContainer) nodes_to_go.push(selectRange.commonAncestorContainer.parentNode);//all browsers
        else nodes_to_go.push(selectRange.parentElement());//IE<9 browsers

        var node;

        while( (node=nodes_to_go.pop()) && node.tagName.toLowerCase() != endNode){
            if(node.nodeType === 1){ //only element nodes (tags)
                nodes.push(node);
            }

            nodes_to_go.push(node.parentNode);          
        }
        return nodes;
    }
4

2 に答える 2

1

これには正規表現を使用しないでください。代わりにドキュメント操作メソッドを使用し、(タグのテキスト表現ではなく) タグ自体を取得します。

例えば:

var find_all_nodes = function(rootNode){
    var nodes = [];
    var nodes_to_go = [rootNode];
    var node;
    while( (node=nodes_to_go.pop()) ){
        if(node.nodeType === 1){ //only element nodes (tags)
            nodes.push(nodes_to_go);
        }
        var cs = node.childNodes;
        for(var i=0; i<cs.length; i++){
            nodes_to_go.push(cs[i]);
        }
    }
    return nodes;
}

タグを取得すると、そこからあらゆる種類の情報を取得できます。MDNの DOM ドキュメントとQuirksmodeの互換性に関する注意事項を確認することをお勧めします。

于 2012-06-27T21:06:10.183 に答える
0

HTML/XML の解析に正規表現を使用しないでください。

...正当な理由がある場合を除きます。

その場合は、 に置き換え(<h1>)(<span[^>]*>)(<sub>)[^<]*</sub></span></h1>ます$1,\n$2\n$3

于 2012-06-27T18:03:01.887 に答える