0

http://jsfiddle.net/DerNalia/zrppg/8/

ほとんど同じことを行う2行のコードがあります

var doesntbreak = $j("hello");
var breaks = $j(" "); 

最初のものはエラーになりませんが、2番目のものはこれをスローします

  Syntax error, unrecognized expression:  

どちらも同じように振る舞うべきではありませんか?

これを解決する方法についての洞察はありますか?私が使用している実際の方法でeleは、Dom からのものであるため、テキスト ノードまたはその他の種類のノードを eb することができます。

アップデート:

私が使用している関数への入力は、これがdomから選択されることに気付きました。更新された例: http://jsfiddle.net/DerNalia/zrppg/11/ <- html マークアップが含まれています。

それで、私の質問は、何かが単なるテキストノードであるかどうかをどのようにテストするのですか? マークアップが含まれていませんか?

4

5 に答える 5

1

通常、jQuery 関数を使用してスタンドアロンのテキスト ノードを作成することはできません。文字列が明らかに HTML でない場合、それはセレクターとして扱われ、&nbsp;jQuery によって有効なセレクターとして認識されません。

任意の文字列 (HTML タグがあるかどうかに関係なく) を解析したい場合は、次のようなものをお勧めしますvar result = $('<div></div>').html('&nbsp;').contents();。HTML またはテキスト文字列を div に配置して解析し、解析結果を要素のリストを含む jQuery オブジェクトとしてすぐに抽出します。結果の要素のリストを追加できます$(parentElem).append(result);

于 2012-07-09T14:43:11.400 に答える
1

これを試して:

function isTextNode(node){
    div=document.createElement('div');
    div.innerHTML=node;
    return $(div).text()==$(div).html();
}

"&nbsp;"テキストを含む要素を見つけたい場合は、有効なセレクターではありません。:contains セレクター http://api.jquery.com/contains-selector/ を使用する必要があります

于 2012-07-09T14:44:10.623 に答える
0

ですから、私を正しい方向に向けてくれたApsillersRolandoに感謝しなければなりません。彼らの答えは非常に近いものでしたが、必要な情報を提供してくれました。

これは私が最終的に使用したものです:

TEXT_NODE = 3;
objectify = function(n) {
    return $j("<div></div>").html(n).contents();
}

function textOnly(n) {
    var o = objectify(n);
    for (var i = 0; i < o.length; i++) {
        if (objectify(o[i])[0].nodeType != TEXT_NODE) {
            return false
        }
    }
    return true;
}

そして、ここに

jsフィドル

いくつかのテスト ケースでは、元のコード サブミッションのどちらも合格しませんでした。

合格するには、この種の入力を処理する必要がありました

"hello" // true
"hello<b>there</b>" // false
"<b>there</b>" // false
"&nbsp;" // false
于 2012-07-09T17:57:03.417 に答える
0

Internet Explorer (少なくとも古いバージョン) には "querySelector" 関数が組み込まれていないため、Sizzle エンジンが直接作業を行う必要があります。したがって、偽の入力に対する許容範囲がわずかに異なるため、エラー報告に違いが生じる可能性があります。

ただし、セレクター式"&nbsp;"はすべてのブラウザーで等しく無効です。ライブラリは、渡されたものを黙って受け入れる義務はないので、おそらくアプリケーションの設計を再考する必要があります。

エンティティを確認する場合、それが単なるテキスト ノードであることが確実な場合は、正規表現を使用できます。.text()または、の代わりにコンテンツを取得できます.html()

于 2012-07-09T14:30:39.133 に答える