Bookmarklet, чтобы открыть пользовательскую ссылку и сделать выбор пользовательской формы выпадающего списка - PullRequest
0 голосов
/ 01 июля 2010

Я написал букмарклет, чтобы открыть пользовательскую веб-ссылку, в данном конкретном случае - конкретное геномное местоположение в геноме UCSC.

javascript:d=%22%22+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);d=d.replace(/%5Cr%5Cn%7C%5Cr%7C%5Cn/g,%22%20,%22);if(!d)d=prompt(%22Enter%20the%20chromosomal%20location%20(ex.%20chr1:213243007-213243247):%22,%20%22%22);if(d!=null)location=%22http://genome.ucsc.edu/cgi-bin/hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=Denilw&hgS_otherUserSessionName=mrkdOvrExpUniqMonometh&position=%22+escape(d).replace(/%20/g,%22+%22);void%200

В геноме человека имеется 24 хромосомы, которые могути я хотел бы сделать следующее:

1) Разобрать хромосому из введенной пользователем строки

Использовать регулярное выражение в сценарии Java для анализа 22 изchr22: 213243007-213243247 или X из chrX: 213243007-213243247

2) Сделайте выбор в раскрывающихся параметрах формы на UCSC на основе пользовательского ввода

Там4 трека или набора данных для каждой из 22 хромосом, всего 88.Они доступны для выбора в секции Custom Tracks браузера генома UCSC в соответствии с выбранной выше линией, скажем

http://genome.ucsc.edu/cgi-bin/hgTracks?hgS_doOtherUser=submit&hgS_otherUserName=Denilw&hgS_otherUserSessionName=mrkdOvrExpUniqMonometh&position=chr14%3A22%2C409%2C038-22%2C409%2C507

HS0356_chr_ CHROMOSOME _duplicates_standard_len_triangle HS0445_dpwg_chr_chr ХРОМОСОМА _duplicates_standard_len_triangle HS1328_chr_ ХРОМОСОМА _duplicates_standard_len_triangle HS1329_dpwg_chr_chr ХРОМОСОМА _duplicates_standard_len_triangle

Тогда я хотел бы ниспадающего меню для выше, где CHROMOSOME определен в части 1 и должен быть изменен с Скрыть на Полный , так что будут отображаться только данные для интересующей хромосомы.

Возможночто-то вроде этого было бы полезно: http://www.codeproject.com/KB/scripting/autoselect.aspx

1 Ответ

1 голос
/ 06 июля 2010

Для вашей первой проблемы,

var str = "chr22:213243007-213243247";
var result = /chr(\w*):(\d*)-(\d*)/.exec(str);
if(result)
{
    alert(result[1]) // 22
    alert(result[2]) // 213243007
    alert(result[3]) // 213243247
}
else
{
    // User entered invalid string
    alert("Invalid input");
}

Если вам не нужны result[2] и result[3], просто проигнорируйте их.

Я посмотрел вторую часть вашего вопроса(надеюсь, я правильно понял), и большинство раскрывающихся списков на странице выглядят так:

<select name="ct_HS1329dpwgchrchr17duplicatesstandardlentriangle_5941" class="hiddenText" style="width: 70px">
    <option selected="">hide</option>
    <option>dense</option>
    <option>full</option>
</select>

Теперь мы можем использовать следующий код, чтобы получить вышеуказанный элемент select и установитьвыбрана опция 'full': (Edit: добавлен обходной путь, поскольку полное имя элемента не может быть предсказано)

// Convert "chr17_duplicates_standard_len_triangle" to "chr17duplicatesstandardlentriangle"
var selectText = "chr17_duplicates_standard_len_triangle";
var selectName = selectText.replace(/_/g, "");

// Find the element that contains "chr17duplicatesstandardlentriangle" in
// it's name.
var selectElements = document.getElementsByTagName("select");
for(var i=0;i<selectElements.length;i++)
{
    var ele = selectElements[i];
    var name = ele.name;
    if(name.indexOf(selectName)!==-1)
    {
        ele.selectedIndex = 2;
        break;
    }
}

Мне не нравится это решение, поскольку оно включает в себя циклическое прохождение всех элементов select встраница, когда вам нужен только один.Если кто-то знает лучшее решение, пожалуйста, скажите мне.

Надеюсь, что ответ на ваш вопрос!

...