2013-11-04 36 views
1

我看到一些jQuery代碼與html標籤選擇器在我看的一個例子。與jQuery的選擇器<html-tag>

什麼

var variable = '';  
$('<div />').text(variable).html() 

手段?我的意思是,我很好奇<div />部分作爲選擇器。 任何人都可以解釋嗎?

編輯:HTML頁面沒有和div裏面。

EDIT2:完整的代碼

<ul id="discussion"></ul> 

<script type="text/javascript"> 
     var encodedName = $('<div />').text(name).html(); 
     var encodedMsg = $('<div />').text(message).html(); 

     $('#discussion').append('<li><strong>' + encodedName 
      + '</strong>:' + encodedMsg + '</li>'); 
</script> 

當我渲染頁面,我只看到了UL標籤內裏的標籤。沒有div。這是我的困惑。 <div />是否用於任何html標籤?我的意思是,我將它更改爲<a /><p />,它仍然工作相同。

對不起,第一次沒有寫清楚問題。

+0

可能重複( http://stackoverflow.com/questions/11040725/correct-closing-tag-in-jquery-selector) – JJJ

+1

或者你問爲什麼有HTML代替選擇器?請參閱http://api.jquery.com/jQuery/#jQuery2 – JJJ

+0

對於jQuery重載'$'的方式,我有很多討厭的含義,這意味着許多完全不同的事情取決於您給出的參數。 – Quentin

回答

1

它創建一個div元素,但不會將其添加到DOM。由於它沒有存儲到變量中,所以這個腳本很沒用。 .text(variable).html()部分也沒有意義:它將div的內容設置爲空字符串,並返回div的內容。

+0

是的,那麼我們可以說div被用作任何HTML標籤來獲取它的內容。對?如果我是對的,那麼這就是我想聽到的:) – ilter

+1

這是真的,但是當您不將它們添加到頁面時創建元素是沒有意義的。爲什麼不使用JavaScript變量或對象?然後,在這個腳本中元素不會被存儲到一個變量中,所以它可能會在創建後立即被銷燬。 – jazZRo

+0

這就是我的想法。正如我所說,該代碼塊是我正在查看的示例(SignalR chathub示例)的一部分。這就是我困惑的原因。感謝您爲我清除:) – ilter

1

在這種情況下,它不是選擇器。

它將字符串轉換爲jQuery元素。

寫作$('<div></div>')的方法與此相同,只是更短。

+0

我剛剛添加了一個編輯筆記。代碼運行時,它也不顯示任何div。讓我寫下其餘的代碼。只需一分鐘。 – ilter

+1

它爲什麼會顯示*任何東西?它正在創建一個div。將它設置爲文本值。獲取它的html值。然後無所作爲。 – Quentin

+0

什麼是創建一個div並設置它的文本值並獲取html的邏輯,當你可以在li標籤中使用該變量作爲文本值時?我再說一遍,呈現的代碼不顯示任何div,它只是li標籤中的文本。 – ilter

1

正如其他人指出的那樣,這不是一個選擇器,而是創建一個HTML元素,而不是當前文檔的一部分。

但是 - 沒有人解釋它實際上在做什麼。

設置文本值然後獲取內存中<div>的HTML值的目的是對html字符串進行編碼。這並不讓有很大的意義在你原來的問題,這是使用一個空字符串,但考慮下面的例子:

var variable = 'This & That < 5'; // a text value with special characters 

var x = $('<div />'); // creates an ad-hoc div element in memory 

x.text(variable); // sets the text contained within the DIV 
        // to 'This & That < 5'. This is the actual literal 
        // text that would be displayed if the element was 
        // displayed in a browser. 

var encoded = x.html(); // gets the HTML representation of 
         // the contents of the div 

alert(encoded); // shows "This &amp; That &lt; 5" 

現在你明白髮生了什麼,雖然,我要指出的是建立一個HTML像這樣的字符串是不是解決此問題的最佳方法。相反,它更有意義,建立你真正需要的元素,像這樣:

// a name and message from somewhere - you don't show where 
// these values from in your code above. 
var name = "Bob O'Conner"; 
var message = "Hi, welcome to my <website>."; 

var newItem = $('<li />').text(':' + message); 
var newTitle = $('<strong />').text(name); 
newItem.prepend(newTitle); 
$('#discussion').append(newItem); 

或者更短的版本,像這樣:

$('#discussion').append(
    $('<li />').text(':' + message).prepend($('<strong />').text(name)) 
); 
[在jQuery選擇正確的結束標記]的