js:请用5个双引号解释这个变量值

时间:2017-01-18 17:13:48

标签: javascript html json blogger addition

请简要了解下面的代码:

<script type="text/javascript">
function recentpostslist(json) {
 document.write('<ul class="recommended">');
 var i;
 var j;
 for (i = 0; i < json.feed.entry.length; i++)
 {
  for (j = 0; j < json.feed.entry[i].link.length; j++) {
   if (json.feed.entry[i].link[j].rel == 'alternate') {
    break;
   }
  }
var postUrl = "'" + json.feed.entry[i].link[j].href + "'";//bs
var postTitle = json.feed.entry[i].title.$t;
var item = "<li>" + "<a href="+ postUrl + '" target="_blank">' + postTitle + "</a> </li>";
 document.write(item);
 }
 document.write('</ul>');
 }
</script>
<script src="https://xxxxxxxxxx.blogspot.com/feeds/posts/summary/-/recommended?max-results=3&alt=json-in-script&callback=recentpostslist"></script>

背景信息

我昨天发现了这个somewhere on the Internet,并且一直试图修改它,因为。

变量ij最初在for循环中声明,如...

for (var i = 0; i < json.feed.entry.length; i++)
{
 for (var j = 0; j < json.feed.entry[i].link.length; j++) {
  if (json.feed.entry[i].link[j].rel == 'alternate') {
   break;
  }
 }

...

...但是在对w3schools.com进行一些(初学者)阅读之后,我得到的印象是他们建议将变量声明保留在for循环之外。我的编程技巧很少,最好的,所以说实话,我不知道我的印象是否合适。

然后我在开头(第3行)为<ul>元素分配了一个类。

到目前为止,这么好。我查了一下,脚本仍在运行。

它的作用是列出博客的3个最新帖子标题为“推荐”。

然后我尝试将一个类分配给<li>元素,该元素被声明为...... ehm ... 值的一部分(我明白了吗?)第15行的item变量:

var item = "<li>" + "<a href="+ postUrl + '" target="_blank">' + postTitle + "</a> </li>";

但这似乎使代码无效,实际上并不令人意外,因为它看起来似乎有点长镜头。

我的问题

然而,当仔细研究这行代码时,我必须说我对所有的引号(单引号和双引号)感到非常困惑。

如果有人能解释,我们将不胜感激 "<a href="+ postUrl + '" target="_blank">'
为什么共有5个双引号?这是不正确的?
'" target="_blank">'提供什么功能?

6 个答案:

答案 0 :(得分:2)

您正在使用JS创建字符串<a href="some-url.html" target="_blank">

所有引号都是必要的,因为您在JS中使用引号来定义string literal,但也在字符串本身中输出引号 - 因此,在双引号周围使用单引号。 JS中的'"'创建字符串"

target="_blank"是一个HTML属性,表示超链接打开的目标窗口应该称为_blank,即a new window

答案 1 :(得分:2)

"<a href="+ postUrl + '" target="_blank">'整个语句用于通过从feed json中读取<a>来动态构建锚标记postUrl,然后将此<a>标记附加到你的HTML。

前两个"引号用于定义包含<a>标记的第一个段的字符串文字,而最后两个"包含target的值1}}属性将显示在最终的HTML上,中间的属性(按顺序排列的第3个)用于在href上查看时关闭HTML属性。< / p>

这样渲染的HTML将如下所示:

<a href="http://the_postUrl_value_from_feed" target="_blank">
顺便说一下,您使用的语句错误,它缺少"属性的起始href引用,请尝试将其更新为:

'<a href="' + postUrl + '" target="_blank">'

答案 2 :(得分:1)

它只是使用单引号来避免在双引号字符串中转义文字双引号。

Error(9,13): PL/SQL: ORA-00947: not enough values

VS

'" target="_blank"'

由于"\"target=\"_blank\"" 的定义包含属性的引号,因此postUrl的定义中包含额外的双引号。但是,我建议使用引号item,因为引号不是网址的部分

如果你这样做,那么行前面缺少双引号。

postUrl

你应该

var item = "<li>" + "<a href=" + postUrl + '" target="_blank">' + postTitle + "</a> </li>";

(否则,var item = "<li>" + '<a href="' + postUrl + '" target="_blank">' + postTitle + "</a> </li>"; # ^^^^^^^^^^^ # Include a literal " after the =, 之前的引用将是无关的,需要删除。)

这条线会更清晰一点

target

你可以责怪JavaScript没有内置的,方便的方法将值插入字符串。 (虽然,请参阅How can I do string interpolation in JavaScript?,这表明已添加此内容。请注意,我不是Javascript程序员。

var item = '<li> <a href="'+ postUrl + '" target="_blank">' + postTitle + "</a> </li>";

答案 3 :(得分:1)

好的,所以这一行有一个混乱的引号。

var item = "<li>" + "<a href="+ postUrl + '" target="_blank">' + postTitle + "</a> </li>"; 

试试这个:

var item = "<li>" + "<a href="+ postUrl + " target='_blank'>" + postTitle + "</a></li>";

问题是postUrl +之后的单引号... 您已经正确转义了网址,因此无需在postUrl周围添加其他引号。

试一试!

答案 4 :(得分:1)

要回答你的问题,我必须解释一下字符串变量。 让我们来看看你填充var项目的代码:

var item = "<li>" + "<a href="+ postUrl + '" target="_blank">' + postTitle + "</a> </li>";

这里你要创建一个字符串变量,所以引号(double或single)必须开始和结束字符串并且必须相同,如下所示:

var myVar = "My content";

在代码中使用一个变量将被放入另一个变量中,所以你必须打开引号,输入你的字符串,然后关闭你的引号,把+ sinal放到concat字符串并完成(或者把另一个+放到与另一个字符串/ var连接。例如:

var myAge = "23";
var myConcatVar = "I am " + myAge + " years old";

这是基本的,关于concat和string。

但是你正在创建一个HTML字符串,HTML代码使用引号。 所以,是的,你必须使用所有引用(双和单)。

现在关于您的代码:

正如您所假设的,您必须使用双引号或单引号启动字符串,但是在连续时必须保留此引号。在var项中,您以双引号开头,但使用单引号与postUrl var连接。您的代码如下所示:

var item = "<li>" + "<a href="+ postUrl + '" target="_blank">' + postTitle + "</a> </li>";

当他必须是这样的时候:

var item = "<li>" + "<a href='"+ postUrl + "' target='_blank'>" + postTitle + "</a></li>";

然后当你打印这个var时,结果将是:

<li><a href='postUrl content' target='_blank'></a></li>

正如您在结果中看到的那样,您必须使用单引号和双引号,因为atribute href和target也使用引号。 关于target =“_ blank”,它会在新标签中发送网址。

我很抱歉我的英语不好哈哈,我希望这会有所帮助。

答案 5 :(得分:0)

原作有三个&#34;这意味着一个人永远不会关闭,所以它不会起作用。正确的将是

" target='_blank'"

经文

'" target="_blank"'

在javascript中有几种方法可以使字符串有两种方式。 &#39;单蜱和&#34; &#34;双嘀嗒。

每当你开始勾选(&#34;,&#39;),其中的所有内容都是一个字符串,直到相应的结束标记(&#34;,&#39;),所以如果你需要一个字符串在字符串内部,您可以通过在双刻度内执行单个刻度或在单个刻度内执行双刻度来实现此目的。在Web控制台中运行

console.log("hey 'yes'");
console.log('hey "yes"');

经文

    console.log("hey "yes"");
    console.log('hey 'yes'');

最后一个会出错,因为你现在说的是嘿的字符串然后变量是关闭空字符串