【问题标题】:Inserting Element Based on a Condition根据条件插入元素
【发布时间】:2012-05-31 08:10:10
【问题描述】:

我想在检查条件后动态插入不同的 url

这是伪代码

If div.id = "abc" then
create url <a href="www.zzz.html"'>Cosmetics</a>');
Append url to div

else if div.id = "xyz" then
create url <a href="www.abc.html"'>LEather goods</a>');
Append url to div

else if div.id = "mno" then
create url <a href="www.kkk.html"'>Diapers</a>');
Append url to div

等等。

如何在 JavaScript/jQUery 中编写此代码。如果有 15 个这样的 If-Else 条件,如何高效处理代码。

这段代码看起来不太好

if $("#abc) then

 var dynLink = $('<a href=zzz.html"'>Cosmetics</a>');
    $("#abc").append(dynLink);

else if $("#xyz")
 var dynLink = $('<a href=abc.html"'>LEather</a>');
    $("#xyz").append(dynLink);

谢谢!

【问题讨论】:

标签: javascript jquery


【解决方案1】:

你可以试试这个:

var link = [
    ["#abc", "#wfh", "http://www.123.com", "Maine"],
    ["#123", "#qwe", "http://www.abc.com", "Texas"]
];

$.each(link, function(e) {
    $(link[e][0] + "," + link[e][1])
        .append("<a href='" + link[e][2] + "'>" + link[e][3] + "</a>");
});​

示例:http://jsfiddle.net/Yvuvh/5/


这只是简单地设置数组中的链接和标题,for 循环正在搜索数组以查看它是否可以找到带有任何iddiv,如果所以,然后附加适当的链接。

要添加更多,只需将另一个 array 添加到 link 数组中,如下所示:

var link = [
    ["#abc", "#wfh", "http://www.123.com", "Maine" ],
    ["#123", "#qwe", "http://www.abc.com", "Texas" ],
    ["#xyz", "#zyx", "http://www.yzx.com", "Mexico"]
];​

【讨论】:

  • 请原谅我的无知,但是在插入链接之前,您在哪里检查每个 div 的 ID?
  • 哦,我现在理解代码了。这很漂亮。如何标记两个答案正确?我支持你:)
  • 再问一个问题 - 我如何添加一个“或”条件..比如 if div.id = abc OR div.id = 123 then // do this
  • @Gorgeous 不幸的是你不能。因此,请始终记住标记您觉得最舒服的答案并回答问题。 :)
  • 我刚刚更新了您的代码,但“wfh”不起作用。任何想法? jsfiddle.net/Yvuvh/1
【解决方案2】:
if $("#abc) then

 var dynLink = $('<a href=zzz.html"'>Cosmetics</a>');
    $("#abc").append(dynLink);

else if $("#xyz")
 var dynLink = $('<a href=abc.html"'>LEather</a>');
    $("#xyz").append(dynLink);

▲ 那是不是有效的 JavaScript。


▼ 这是how you do it,当你有一堆 if-thens:

switch(div.id){
    case "abc":
        $('<a href="zzz.html">Cosmetics</a>').appendTo("div#whateveritis");
        break;
    case "xyx":
        $('<a href="abc.html">Leather</a>').appendTo("div#whateveritis");
        break;
    case "more more more":
        //same stuff here.
        break;
    default:
        //default
        break;
}

对于初学者来说非常不言自明。 ;)

说真的,您应该开始查看MDN 中的内容。它是 JavaScript 参考和演示(示例)的好地方。

【讨论】:

  • Derek 感谢您首先向我展示了一些代码,然后提供了一个链接,让我可以学习编写这种代码。我将详细研究 switch-case 语句。这看起来与我在 Java 中使用的相似
【解决方案3】:

创建一个包含所有这些关系的对象,如下所示:

var links = {
    'abc': { link:'foo.html', text:'Foo Link' },
    'xyz': { link:'bar.html', text:'Bar Link' }
};

然后我们将添加几个div 元素来测试一下:

​<div id="abc"></div>
<div id="xyz"></div>​​​​​​​​​​
<div id="foo"></div>

最后是我们的 jQuery,它应该为我们添加一些链接:

$("div").append(function(){
    var link = links[this.id];
    return link ? $("<a>", { href:link.href, html:link.text }) : "n/a" ;
});​​​

这将遍历我们所有的div 元素,检查它们的id 是否在我们的links 对象中找到。如果是,那么我们在该div 中放置一个具有适当属性的链接。如果在我们的对象中没有找到id,我们只需将“n/a”附加到div

<div id="abc"><a href="foo.html">Foo Link</a></div>
<div id="xyz"><a href="bar.html">Bar Link</a></div>
<div id="foo">n/a</div>

演示:http://jsfiddle.net/vFjSw/

【讨论】:

  • Jonathan,一个非常好的解决方案,但在性能方面我如何确定您的解决方案或 Shaz 解决方案的性能是否更好?
【解决方案4】:

将 div.id 放入映射到目标 URL 的关联数组中,然后通过键查找。一个散列查找击败了线性数量的 if/else-if 比较 if 您只需为每次查找加载一次...

无论微观性能如何,这让我觉得它更“优雅”、可读或可维护。对我来说,make array v. run if/else if 哪个更快并不明显,你必须进行分析。但是,如果您 1) 必须针对时间进行优化,并且 2) 每次加载页面时只期望使用一次此代码,那么您能做的最好的事情就是将您期望的 url 放在 if/elif 块的顶部。请务必准确评论您正在执行此操作,以便未来的开发人员不会按字母顺序排列它们。

【讨论】:

  • 谢谢,但我对脚本太陌生了,以至于我头晕目眩..你能显示一些代码吗
  • 那你为什么在 StackOverflow 上呢?这是像我这样的初学者可以学习的地方吗?我确实尝试过,而不是我要求你做的作业。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2011-08-27
相关资源
最近更新 更多