有人可以解释为什么" +"在HTML标记中关闭引号之前需要吗?

时间:2014-05-12 19:54:21

标签: javascript jquery html variables string-concatenation

我是Javascript的新手,这是我第一次在参加JQuery课程时遇到过这种类型的连接。我的问题是关于+符号以及为什么需要在“>”之前使用所有引号关闭HTML标记。换句话说,代码的+“'>”部分。为什么不能在没有加号的情况下结束引号并关闭标记?有人可以一步一步地打破这种局面吗?我在脚本中留下了一条评论,我很困惑。有2个实例。感谢。

<script type="text/javascript">

    $("document").ready(function() {    
        buildBookmarks('h3', 'header'); 
    }); 

    function buildBookmarks(strWhichTag, sBookMarkNode) {

        var cAnchorCount = 0;

        var oList = $("<ul id='bookmarksList'>");

        $("div:not([id=header]) " + strWhichTag).each(function() { //This is the part 
            $(this).html("<a name='bookmark" + cAnchorCount + "'></a>" + $(this).html());       
            oList.append($("<li><a href='#bookmark" + cAnchorCount++ + "'> " + $(this).text() + "</a></li>"));
        });

        $("#" + sBookMarkNode).append(oList);
    }
</script>

7 个答案:

答案 0 :(得分:4)

你已经结束了字符串文字,回到这里:

"<li><a href='#bookmark"
//                     ^ here

现在,您将表达式连接到它之前的字符串,并将该连接的结果与另一个字符串文字连接起来,并使用+运算符进行连接。

如果我们用表示表达式(它们是)的占位符替换文字,并添加括号,它可能会变得更清晰:

oList.append($(A + (cAnchorCount++) + B + ($(this).text()) + C));

请注意,这里的HTML并不特别;你在这里的字符串就像任何其他字符串一样。他们碰巧代表HTML。 (顺便提一下,我建议在jQuery之前学习W3C DOM;它会使这种分离更加清晰。)

答案 1 :(得分:0)

该脚本通过将字符串连接在一起在Javascript中构建HTML元素。你可以这样想:

tag_opening + anchor_count + tag_closing

+是必要的,因为它在一起添加字符串。没有它,你只需要跟随另一个字符串,这将导致语法错误。

答案 2 :(得分:0)

这里的加号用于连接。你真正在做的是添加一个你写的字符串(一个名字='书签)加一个变量(cAnchorCount),加上另一个字符串('&gt;)来制作一个长字符串。没有加号,语法没有意义。

答案 3 :(得分:0)

您的示例不清楚,但您要将变量和HTML字符串组合在一起:

"<a href='#bookmark" + cAnchorCount++ + "'> "  

将评估为:

<a href='#bookmark1'>

您列出的代码使用外部双引号(")来包装字符串和内部单引号(')以包装属性值。 JavaScript字符串中没有插值,只有字符串连接。

答案 4 :(得分:0)

他们正在尝试格式化字符串,以便在代码编译后,它将是可读的HTML。

例如:

oList.append($("<li><a href='#bookmark" + cAnchorCount++ + "'> " + $(this).text() + "</a></li>"));正试图最终获得

<li><a href='#bookmark3'>TEXT</a></li>

添加文字后,您需要'><a href='正确关闭代码。

答案 5 :(得分:0)

在这种情况下,它与HTML或被连接的字符串的内容无关,只是JavaScript使用+运算符来连接字符串。我想每种语言都使用一些运算符来执行此操作。例如:

var result = 'first string' + 'second string';

这会创建连接字符串:

'first stringsecond string'

现在,如果其中一个字符串碰巧是一个变量,那么同样的事情发生了:

var someVariable = 'second string';
var result = 'first string' + someVariable;

这仍然会产生相同的连接字符串:

'first stringsecond string'

问题中的所有代码都是在这些情况下进行的。将一个字符串连接到另一个字符串。例如:

$("div:not([id=header]) " + strWhichTag)

变量strWhichTag包含一些字符串值,可能是HTML标记的名称,以其名称和用法来判断。因此,如果它包含'div'之类的内容,则结果为:

$("div:not([id=header]) div")

然后,jQuery将这个整体结果字符串作为选择器进行评估,以识别要操作的一组HTML元素。但字符串连接并不重要,它可以很容易地产生这个:

$("div:not([id=header]) some nonsense")

如果strWhichTag变量包含值'some nonsense'

答案 6 :(得分:0)

这被称为连接,#是字符串的ID,而sBookMarkNode是变量。然后,当页面加载时,它会在#+ sBookMarkNode之后追加(创建),显然创建变量sBookMarkNode,否则就是全局变量,因为我在你的代码片段中看不到它。