そのIDを予めjQueryでも扱えるようエスケープした状態のIDを作成する必要がありました。
そこで、以下のようなユーティリティークラスを作成しました。
jQueryのエスケープに関しては、下記にあります。
jQuery API Documentation Category: Selectors
package util; /** * jQueryユーティリティー * @author @michigawi */ public final class JQueryUtil { /** エスケープ対象文字 */ private static final char[] META_CHARACTERS = new char[]{' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '`', '{', '|', '}', '~'}; /** jQueryのエスケープ文字 */ private static final String ESCAPE_META = "\\\\"; /** * エスケープします。 * http://api.jquery.com/category/selectors/ * @param target ターゲットの文字 * @return エスケープ後の文字列 */ public static final String escape(String target) { if (target == null) { return null; } StringBuilder escaped = new StringBuilder(target.length() * 2); for (char character : target.toCharArray()) { if (findEscapeTarget(character)) { escaped.append(ESCAPE_META); } escaped.append(character); } return escaped.toString(); } /** * 文字列がエスケープ対象か判別します。 * @param target ターゲットの文字 * @return エスケープ対象の場合、true */ private static boolean findEscapeTarget(char target) { for (char meta : META_CHARACTERS) { if (target == meta) { return true; } } return false; } }
テストコード
package util; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.junit.Test; /** * {@link util.JQueryUtilTest}のテスト * @author @michigawi */ public class JQueryUtilTest { @Test public void 半角スペースをエスケープする() { assertThat(JQueryUtil.escape("jQuery selector"), is("jQuery\\\\ selector")); } @Test public void 半角エクスクラメーションマークをエスケープする() { assertThat(JQueryUtil.escape("jQuery!selector"), is("jQuery\\\\!selector")); } @Test public void ダブルクウォートをエスケープする() { assertThat(JQueryUtil.escape("jQuery\"selector"), is("jQuery\\\\\"selector")); } @Test public void シャープをエスケープする() { assertThat(JQueryUtil.escape("jQuery#selector"), is("jQuery\\\\#selector")); } @Test public void ダラーをエスケープする() { assertThat(JQueryUtil.escape("jQuery$selector"), is("jQuery\\\\$selector")); } @Test public void パーセントをエスケープする() { assertThat(JQueryUtil.escape("jQuery%selector"), is("jQuery\\\\%selector")); } @Test public void アンドをエスケープする() { assertThat(JQueryUtil.escape("jQuery&selector"), is("jQuery\\\\&selector")); } @Test public void シングルクォートをエスケープする() { assertThat(JQueryUtil.escape("jQuery'selector"), is("jQuery\\\\'selector")); } @Test public void 左丸カッコをエスケープする() { assertThat(JQueryUtil.escape("jQuery(selector"), is("jQuery\\\\(selector")); } @Test public void 右丸カッコをエスケープする() { assertThat(JQueryUtil.escape("jQuery)selector"), is("jQuery\\\\)selector")); } @Test public void アスタリスクをエスケープする() { assertThat(JQueryUtil.escape("jQuery*selector"), is("jQuery\\\\*selector")); } @Test public void プラスをエスケープする() { assertThat(JQueryUtil.escape("jQuery+selector"), is("jQuery\\\\+selector")); } @Test public void カンマをエスケープする() { assertThat(JQueryUtil.escape("jQuery,selector"), is("jQuery\\\\,selector")); } @Test public void ピリオドをエスケープする() { assertThat(JQueryUtil.escape("jQuery.selector"), is("jQuery\\\\.selector")); } @Test public void スラッシュをエスケープする() { assertThat(JQueryUtil.escape("jQuery/selector"), is("jQuery\\\\/selector")); } @Test public void コロンをエスケープする() { assertThat(JQueryUtil.escape("jQuery:selector"), is("jQuery\\\\:selector")); } @Test public void セミコロンをエスケープする() { assertThat(JQueryUtil.escape("jQuery;selector"), is("jQuery\\\\;selector")); } @Test public void 小なり記号をエスケープする() { assertThat(JQueryUtil.escape("jQueryselector"), is("jQuery\\\\>;selector")); } @Test public void クエッションをエスケープする() { assertThat(JQueryUtil.escape("jQuery?selector"), is("jQuery\\\\?selector")); } @Test public void アットマークをエスケープする() { assertThat(JQueryUtil.escape("jQuery@selector"), is("jQuery\\\\@selector")); } @Test public void 左大カッコをエスケープする() { assertThat(JQueryUtil.escape("jQuery[selector"), is("jQuery\\\\[selector")); } @Test public void バックスラッシュをエスケープする() { assertThat(JQueryUtil.escape("jQuery\\selector"), is("jQuery\\\\\\selector")); } @Test public void 右大カッコをエスケープする() { assertThat(JQueryUtil.escape("jQuery]selector"), is("jQuery\\\\]selector")); } @Test public void キャレットをエスケープする() { assertThat(JQueryUtil.escape("jQuery^selector"), is("jQuery\\\\^selector")); } @Test public void グレイヴアクセントをエスケープする() { assertThat(JQueryUtil.escape("jQuery`selector"), is("jQuery\\\\`selector")); } @Test public void 左中カッコをエスケープする() { assertThat(JQueryUtil.escape("jQuery{selector"), is("jQuery\\\\{selector")); } @Test public void 縦線をエスケープする() { assertThat(JQueryUtil.escape("jQuery|selector"), is("jQuery\\\\|selector")); } @Test public void 右中カッコをエスケープする() { assertThat(JQueryUtil.escape("jQuery}selector"), is("jQuery\\\\}selector")); } @Test public void チルダをエスケープする() { assertThat(JQueryUtil.escape("jQuery~selector"), is("jQuery\\\\~selector")); } }
0 件のコメント:
コメントを投稿