顯示具有 屬性 標籤的文章。 顯示所有文章
顯示具有 屬性 標籤的文章。 顯示所有文章

2022年11月2日 星期三

V120502A - jQuery - 屬性設定及 CSS

 目的: jQuery 屬性設定及 CSS

處理方法: 1>取得  jQuery屬性:  $("#my_tbl").attr('style')
                       var Tmp_tbl = $("#my_tbl");
                        console.log("0 Tmp_tbl.attr('style'):", Tmp_tbl.attr('style'));
                  2>設定 jQuery屬性:   $("#my_tbl").attr('style') 
                     Tmp_tbl.attr('style','border: 5px solid red;');
                  3>取得輸入元件的欄位值
// HTML <input type="text"> // 設定欄位值 $('input').val('Hello World!'); // 設定後的結果 <input type="text" value="Hello World!">
4>設定 CSS 屬性值
                     例如,替所有段落的字體設為紅色,背景設為藍色:
                      $('p').css({ color: 'red', 'background-color': 'blue' });
      


1>*.js
// [確定]  - 於 sub_panel1 建立 Table
function mySub1_OkBtn1_click() {
    var Tmp_Str = "<div  id='print_area'   style = 'border: 1px solid red; width=100%;' >"
        + "<table style = 'border: 1px solid black; width=100%;'  id = 'my_tbl' > "        
        + "<tr style='border: 6px solid blue;'><th>件號<br>(PART NO)</th><td>R=8-84-766-21-1</td></tr>"
        + "<tr style='border: 6px solid blue;'><th>EO號碼<br>(EONO)</th><td>GM1381+A15</td></tr>"
        + "</table>"
        +"</div>";
    //var Tmp_tbl = Ext.getCmp("my_tbl");
    var Tmp_tbl = $("#my_tbl");
    if (!checkisnull(Tmp_tbl)) {        
        console.log("0 Tmp_tbl:", Tmp_tbl);        
        console.log("0 Tmp_tbl.attr('style'):", Tmp_tbl.attr('style'));
        console.log("0 $('#my_tbl').attr('style'):", $("#my_tbl").attr("style"));
        Tmp_tbl.attr('style','border: 5px solid red;');
    };    
    var Tmp_sub_panel1 = $('#sub_panel1');
    Tmp_sub_panel1.append(Tmp_Str);
}


// [設定  property]  - 設定  Table 的 style  - 改變顏色為 藍色
function sub_PrnTable_OkBtn2_click() {
    var Tmp_tbl = $("#my_tbl");
    if (!checkisnull(Tmp_tbl)) {
        console.log("5 Tmp_tbl is captched");
        console.log("5 Tmp_tbl:", Tmp_tbl);        
        console.log("5 Tmp_tbl.attr('style'):", Tmp_tbl.attr('style'));        
        Tmp_tbl.attr('style', 'border: 2px solid blue;');
        console.log("5 $('#my_tbl').attr('style'): blue", $("#my_tbl").attr("style"));
    }
}


jQuery 屬性與樣式 (Attributes & CSS)

我想一般對於 JavaScript 大部分的操作都用在變動 HTML DOM 元素的屬性跟樣式,如果你有這個經驗,就會知道在設定時會有許多複雜及麻煩的問題,比如說舊 IE 它 setAttribute 不吃 name 屬性;又像在指定 class 屬性時,名稱不能用 class 而要用 className 等問題。令人開心的,jQuery 已經幫你處理掉中間這些繁雜過程可能遇到的問題了!

用 jQuery 時,你只需要記得原本的 HTML 和 CSS 是怎樣寫就行。

jQuery 對於 HTML Tag 屬性的操作 (Attributes)

取得選取到的元素之屬性值:

.attr(attributeName)

例如,取得第一個連結的 title 值:

$('a').attr('title');

替選取到的元素設定屬性值:

.attr(attributeName, value)

例如,替所有連結的 title 屬性設為 Enjoy jQuery:

$('a').attr('title', 'Enjoy jQuery');

你也可以用 key/value object 的方式來替所有匹配到的元素設定多個屬性值:

.attr(attributes)

例如,同時改變 alt 和 title 屬性:

$( "#greatphoto" ).attr({
    alt: "Beijing Brush Seller",
    title: "photo by Kelly Clark"
});

移除元素屬性也很簡單:

.removeAttr(attributeName)

例如,移除所有連結的 title 屬性:

$('a').removeAttr('title');
// 上面同等於這樣做
$('a').attr('title', null);

jQuery 對 class 這個屬性有特別的處理

對於 class,jQuery 另外提供個別的函式來作 class 增刪的動作,這是為了可以方便疊加與移除特定的 class。

增加 class:

.addClass(className)

例如,幫所有的段落加入 selected 和 highlight 類別:

$('p').addClass('selected highlight');
用空白隔開多個 class。

移除 class:

.removeClass(className)

例如,移除 id 為 wrapper 的元素其 blue 這個類別:

$('#wrapper').removeClass('blue');

Value - Getter/Setter

val,一個很常用到的方法,用來取得和設定表單元素的 value 值:

.val() // get
.val(value) // set

例如,取得表單元素的值:

// 取得下拉選單 (select box) 的值
$('select.foo').val();

// 取得 checkbox 欄位的選取值
$('input:checkbox:checked').val();

// 取得 radio 欄位的選取值
$('input:radio[name=bar]:checked').val();

例如,設定表單元素的值:

// HTML
<input type="text">
// 設定欄位值
$('input').val('Hello World!');
// 設定後的結果
<input type="text" value="Hello World!">

jQuery 對於樣式的操作 (CSS)

傳統 JavaScript 在處理 CSS 的問題上簡直頭大,設定一個 background-color 你得先知道其實要改用 elem.style.backgroundColor;對透明度 opacity 設定上你要了解舊 IE 是用 filter··。jQuery 的寫法很簡單,就直接用 key/value 成對的一組屬性來設定,我們只要知道 CSS 的表達式就沒問題。

取得第一個匹配到的元素之樣式:

.css(propertyName)

例如,取得第一個段落的字體顏色:

$('p').css('color'); 

替所有匹配到元素設定一種樣式:

.css(propertyName, value)

例如,替所有段落的透明度設為半透明:

$('p').css('opacity', '0.5');
// 是的,設 opacity 就可以,jQuery 已經幫你處理好跨瀏覽器問題

你也可以用 key/value 對的方式指定給所有匹配的元素多個樣式:

.css(properties)

例如,替所有段落的字體設為紅色,背景設為藍色:

$('p').css({
  color: 'red',
  'background-color': 'blue'
});
若屬性中包含 -,記得加上引號,沒有的話則可有可無。

元素的位置及寬高 - 常用的屬性獨立出來

.width() // 取得元素寬度
.width(value) // 設定元素寬度
.height() // 取得元素高度
.height(value) // 設定元素高度

.width() .height() 抓到的值是元素內容寬、高度,不包含 padding, border, margin。

例如,取得第一個匹配到的段落元素高度 (px) (無參數)

$('p').height();

例如,設定每個匹配到的段落元素其高度設為 100px (沒指定單位時預設為 px) (有參數)

$('p').height(100);

取得元素相對於當前視窗左上角的位置偏移量:

.offset()
// 返回值 Object{top, left}
var offset = $('p:last').offset();
console.log(offset.left)
console.log(offset.top)

一般在傳統 JavaScript 我們會用 offsetLeft 及 offsetTop 來取得元素在頁面上的座標,不過 IE 與 FF 瀏覽器解讀這兩個屬性是不一樣的,IE 會解讀成目標元素跟父元素的 left-top 距離;FF 則是相對於頁面上的 left-top,所以在 IE 下我們一般都需要利用往父元素跑迴圈加總 offsetLeft 來取得元素在頁面上的座標值。不過,在 jQuery 中我們統一用 offset() 就可以囉!

看過上述 jQuery 對於屬性及樣式的操作,是不是簡化了我們許多不必要的煩惱,讓我們可以將精力拉回純 HTML 與 CSS 的思緒上面呢!

2022年8月31日 星期三

JS - - Object,Array的宣告 , Object 基本型別 及 物件型別 - Object 的建立 - 屬性的存取 - typeof 型別的判斷 - == ===


JavaScript 內建的型別主要可以分成基本型別 (Primitives) 與物件型別 (Object) 兩大類。 
基本型別又分成 string、number、boolean、null、undefined 幾種,
除了以上幾種之外,其他都可以歸類至物件型別 (Object)

一.物件的定義 - Object :
「An object is a collection of properties and has a single prototype object.」
一個物件可以是個零至多種屬性的集合,而屬性是鍵 (key) 與值 (value) 之間的關聯。 
一個屬性的「值」可以是某個基本型別,也可以是另一個物件,甚至可以是一個函數。
物件可以是瀏覽器預先定義好的,當然也可以是由自己定義物件的屬性與內容

1>Object 的宣告方式:
var person={}                                 //或是  var person=new Object();
person["NAME"]="蔡聰進";
person["GENDER"]="male";

2>Array的宣告方式:
var tempData=[];
tempData.push(rec);


1>建立 Object 的2種方法如下:
方法1> new Object() 方式,建立物件 , 再設定物件屬性
var person = new Object(); 
person.name = 'Kuro'; 
person.job = 'Front-end developer'; 
person.sayName = function() { alert( this.name ); };

方法2>  JSON 方式 , 建立物件
var person = { 
       name: 'Kuro', 
       job: 'Front-end developer', 
       sayName: function() { alert( this.name ); } 
};

 -->
直接用大括號 { },即可建立起一個新的物件,並且在建立物件的同時直接指定屬性至該物件內。
這種建立物件的方式稱為「物件實字 (Object literal)」,同時也是 JSON 格式的核心語法。



二.屬性的存取 , 建議用   Object["Name"]
存取屬性 的2種方法如下:
var person = { 
      name: 'Kuro', 
      job: 'Front-end developer', 
      sayName: function() { alert( this.name ); } ,
      "001" : "Hello",
}; 
1>由.Name存取
person.name;                   // 'Kuro' 
person.sayName();         // ƒ sayName()
person.001;                   // SyntaxError: Unexpected number 

2>由 [Name]存取
person["name"];             // 'Kuro' 
person["sayName"];      // ƒ sayName()
person["001"]              // Hello 

--> 屬性的新增及刪除
person["age"]=50;
console.log("person[age]]",person["age"]);  //50
delete person["age"];
console.log("person[age]]",person["age"]);  //undefined

--> 判斷屬性是否存在
方法1:  ==undefined
if (person["age"]!=undefined){
    console.log("property age exist");
}

方法2:  (age in person)  , true/false
if (age in person){
    console.log("property age exist");
}

方法3: person.hasOwnProperty('age')
if (person.hasOwnProperty('age')) {
    console.log("property age exist");
}

-->
if (person["name"]!="undefined"){
    console.log("1 property name exist");
};
if ("name" in person){
    console.log("2 property name exist");
};
     if (person.hasOwnProperty('name')) {
    console.log("3 property name exist");
};


三.型別的判斷 - typeof  -  typeof 運算子回傳的東西都是「字串」

typeof true; // 'boolean' 
typeof 'Kuro'; // 'string' 
typeof 123; // 'number' 
typeof NaN; // 'number' 
typeof { }; // 'object' 
typeof [ ]; // 'object' Array
typeof undefined; // 'undefined' 
typeof window.alert; // 'function' 
typeof null; // 'object'


--> typeof   Array   --> 得到 "object" , 非 array
      由 Array.isarray([]) 判斷  //true
       Array.isarray( [4,"a","b","c"] );  //true
       Array.isarray("abc");   //false


四.==   ===  比較
var a = 10; 
var b = "10"; 
console.log( a == b ); // true 
console.log( a === b ); // false

console.log(null == undefined) ; //true
console.log(null === undefined) ; //false

-->
在 JavaScript 這門程式語言中,大家會提倡盡量使用 === 來取代 == 的原因。
-->
!= 的版本會做自動轉型,而 !== 則不會做自動轉型。