如何根据Url中的查询字符串以编程方式更改Url

时间:2015-09-02 16:12:01

标签: javascript jquery html asp.net

GridView生成表:

<table id="ctl00_centerContent_GridView1">
        <tr>
            <th scope="col">
                <!-- COLUMN INFORMATION -->
            </th>
        </tr>
        <tr>
            <td style="font-weight:bold;"><a href="icard.aspx?cid=34&amp;cpid=345&amp;ccid=908">Insurance 1</a></td> <!-- link color by default is blue and turns orange on hover -->
            <td align="center">&nbsp;</td>
            <td align="center">Y</td>
            <td>908 as ave</td>
            <td align="center">N</td>
            <td align="center">N</td>
            <td align="center">Y</td>
            <td>Electronic</td>
            <td style="white-space:nowrap;">090-093-2311</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td style="font-weight:bold;"><a href="icard.aspx?cid=34&amp;cpid=345&amp;ccid=542">Insurance 2</a></td>
            <td align="center">&nbsp;</td>
            <td align="center">Y</td>
            <td>908 as ave</td>
            <td align="center">N</td>
            <td align="center">N</td>
            <td align="center">Y</td>
            <td>Electronic</td>
            <td style="white-space:nowrap;">090-093-2311</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td style="font-weight:bold;"><a href="icard.aspx?cid=34&amp;cpid=345&amp;ccid=587">Insurance 3</a></td>
            <td align="center">&nbsp;</td>
            <td align="center">Y</td>
            <td>908 as ave</td>
            <td align="center">N</td>
            <td align="center">N</td>
            <td align="center">Y</td>
            <td>Electronic</td>
            <td style="white-space:nowrap;">090-093-2311</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td style="font-weight:bold;"><a href="icard.aspx?cid=34&amp;cpid=345&amp;ccid=125">Insurance 4</a></td>
            <td align="center">&nbsp;</td>
            <td align="center">Y</td>
            <td>908 as ave</td>
            <td align="center">N</td>
            <td align="center">N</td>
            <td align="center">Y</td>
            <td>Electronic</td>
            <td style="white-space:nowrap;">090-093-2311</td>
            <td>&nbsp;</td>
        </tr>
</table>

如何添加一个JQuery脚本,该脚本从每行获取url并检查ccid值,如果它是542587,则该链接不应该链接到任何地方,字体颜色应为黑色,光标应为默认值(箭头)。

例如,对于第二行,<a href="icard.aspx?cid=34&amp;cpid=345&amp;ccid=542">Insurance 2</a>应为<a href="javascript:void(0);" style="color: #000; cursor: default;">Insurance 2</a>

脚本(开始写但需要一些帮助):

$("#ctl00_centerContent_GridView1 tr td").each(function() {
    var url = $(this).attr("href");
    var cid = getParameterByName('ccid');
    /* HOW CAN I REPLACE THE URL OF THE ANCHOR to "javascript:void(0);" IF "cid" is 542 or 587? */
    $(this).closest('a').css('color', 'black'); //will this work?
    $(this).closest('a').css('cursor', 'default'); //will this work?
});

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
  • 如何将锚点的Url替换为Javascript:void(0); cid是542或587。
  • 如何将文本颜色更改为黑色,将光标更改为默认值 箭头。

3 个答案:

答案 0 :(得分:2)

您可以使用.attr设置属性(此处也不需要2次调用.css):

$(this).closest('a')
       .attr('href','javascript:void(0)')
       .css({color:'black',cursor:'default'});

您的代码需要进行一些更改才能执行您想要的操作,因为当前它正在查找当前页面的 url中的ccid变量 - 而不是{{1属性。

首先,将href更改为仅查看each元素:

a

接下来,更改您的$("#ctl00_centerContent_GridView1 tr td a").each(function() { ----------------------------------------^ here 以获取您正在寻找的网址和参数:

getParameterByName

最后,如果function getParameterByName(url, name) { console.log(url) name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(url); return results ? decodeURIComponent(results[1].replace(/\+/g, " ")) : ""; } 符合您的要求,请将您的代码更改为仅执行此答案中最初指定的操作(请注意删除ccid,因为我们现在只关注{{ 1}}元素):

closest('a')

下面的实例。

&#13;
&#13;
a
&#13;
$("#ctl00_centerContent_GridView1 tr td a").each(function() {
    var url = $(this).attr("href");
    var cid = getParameterByName(url, 'ccid');
    if (cid == "542" || cid == "587"){
        $(this)
            .attr('href','javascript:void(0)')
            .css({color:'black',cursor:'default'});
    }
});
&#13;
&#13;
&#13;

答案 1 :(得分:1)

让我们一步一步。

迭代应该超过a元素,因为你没有任何不相关的锚点,所以好的选择器将是

#ctl00_centerContent_GridView1 tr td a

提取ccid这样的值应该起作用的值:

var ccidValue = getParameterByName($(this).attr("href"), "ccid");

请务必更新getParameterByName以接受url参数,而不是始终使用当前页面网址:

function getParameterByName(url, name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(url);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

然后检查值是&#34; 542&#34;或&#34; 587&#34;,并替换:

if (ccidValue === "542" || ccidValue === "587") {
    $(this).attr("href", "javascript:void(0);")
}

如果你想要应用一些样式,我真的建议定义一个类并使用它而不是一些内联脚本:

disabledCardLink {cursor: default; color: black;}

$(this).addClass("disabledCardLink");

答案 2 :(得分:1)

试试这个:

$(function(){
    $('a[href*="ccid=542"]', 'a[href*="ccid=587"]').each(function(){
        DisableLink($(this));
    });
});

function DisableLink(elem){
    elem.parent().html('<a href="javascript:void(0);" style="color: #000;cursor: default;">' + elem.text() + '</a>');
}

使用jquery&#39;包含&#39;选择器选择包含您要查找的ccids的所有锚点,并将每个元素传递给一个方法,该方法用修改后的锚标记替换其父td元素的html。