2010-06-30 86 views
0

我已经写了一本bookmarlet来打开用户定义的网页链接,在这个特定的情况下,在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中的22:213243007-213243247或x来自chrX:213243007-213243247

2)在UCS表单的下拉选项中进行选择C基于用户输入

对于22条染色体中的每条染色体,总共有88条染色体可以显示4条轨迹或数据集。这些是可用于在定制选择曲目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_ 染色体 _duplicates_standard_len_triangle HS0445_dpwg_chr_chr 染色体 _duplicates_standard_len_triangle HS1328_chr_ 染色体 _duplicates_standard_len_triangle HS1329_dpwg_chr_chr 染色体 _dupli cates_standard_len_triangle

然后我想下拉菜单针对上述情况,其中染色体在第1部分被定义为从隐藏改为使得仅针对感兴趣的染色体中的数据将被显示。

也许这样的事情将是有益的: http://www.codeproject.com/KB/scripting/autoselect.aspx

回答

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

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

希望能回答你的问题!

+0

这几乎是完美的,但我不知道如何从下拉菜单的标签(写在下拉菜单上,例如HS1329_dpwg_chr_chr * CHROMOSOME * _duplicates_standard_len_triangle)转到下拉菜单的实际编码名称(例如“ct_HS1329dpwgchrchr17duplicatesstandardlentriangle_5941”)使用javascript。 – 2010-07-06 16:51:24

+0

我认为问题是名称末尾的'_5941'。它似乎只是一个随机数字。我会尝试在我的代码中添加解决方法。 – Na7coldwater 2010-07-06 18:43:19

+0

甜蜜,提前致谢 – 2010-07-06 18:58:21