Bookmarklet用于打开用户定义的链接并使用户定义的表单下拉框选择

时间:2010-06-30 20:44:22

标签: javascript automation macros bookmarklet bioinformatics

我写过一本书籍小册子来打开一个用户定义的网络链接,在这个特定情况下,是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脚本中使用正则表达式从chr22:213243007-213243247解析22或从chrX解析X:213243007-213243247

2)根据用户输入在UCSC表单的下拉选项中进行选择

22条染色体中每条染色体都有4条轨迹或数据集,共计88条。根据上面选择的linke,可以在UCSC基因组浏览器的 Custom Tracks 部分中选择它们,比如说

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_ 染色体 _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 个答案:

答案 0 :(得分:1)

对于你的第一个问题,

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元素并将所选选项设置为“完整”:(编辑:添加了一种解决方法,因为无法预测完整元素名称)

// 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;
    }
}

我不喜欢这个解决方案,因为当你只需要一个时,它涉及遍历页面上的所有选择元素。如果有人知道更好的解决方案,请告诉我。

希望能回答你的问题!