Ширина элемента, составляющего режим причуд в JavaScript?

В этой функции:

void testFunc(const CMyString &strParam) {
    cout << strParam << endl;
}

strParam является ссылкой const на CMystring, поэтому вы можете вызывать только const -квалифицированный метод для него:

[ 111]

В рамках const -квалифицированного метода вы не можете изменять не mutable атрибуты или вызывать не const методы, что гарантирует, что ваш объект не «модифицирован» (по крайней мере, он не должен быть из внешняя точка зрения).

Обратите внимание, что вам, скорее всего, следует преобразовать в const char* из const -квалифицированного метода, в противном случае можно было бы сделать это:

void testFunc(const CMyString &strParam) {
    // I am modifiying the underlying char array of const variable
    static_cast<char*>(strParam)[0] = '\0';
}

Поэтому ваш оператор преобразования должен быть:

operator const char*() const;
6
задан Commercial Suicide 21 September 2017 в 21:04
поделиться

3 ответа

@1

document.compatMode

"CSS1Compat" означает "режим стандартов", и "BackCompat" означает "режим причуд".

@2

свойство offsetWidth HTML элементы дает свою ширину на экране в пикселях.

<div id="mydiv" style="width: 250px; padding-left: 1px; border: 2px black solid">hello</div>

document.getElementById('mydiv').offsetWidth
//255 (standards) 250 (quirks)

Функция, которая компенсирует ширину IE quirksmode, должна проверить на режим рендеринга, затем добавляют границы и дополняющий к ширине;

function compensateWidth( el, targetWidth ){

    var removeUnit = function( str ){
        if( str.indexOf('px') ){
            return str.replace('px','') * 1;
        }
        else { //because won't work for other units... one may wish to implement 
            return 0;
        }
    }
    if(document.compatMode && document.compatMode=="BackCompat"){
        if(targetWidth && el.offsetWidth < targetWidth){
            el.style.width = targetWidth;
        }
        else if (el.currentStyle){
            var borders = removeUnit(el.currentStyle['borderLeftWidth']) + removeUnit(el.currentStyle['borderRightWidth']);
            var paddings = removeUnit(el.currentStyle['paddingLeft']) + removeUnit(el.currentStyle['paddingRight']);
            el.style.width = el.offsetWidth + borders + paddings +'px';
        }
    }

}

Теперь существует два способа использовать его:

var div = document.getElementById('mydiv')
// will try to calculate target width, but won't be able to work with units other than px
compensateWidth( div );

//if you know what the width should be in standards mode
compensateWidth( div, 254 );
2
ответ дан 17 December 2019 в 07:10
поделиться
javascript:(function(){
    var mode=document.compatmode,m;if(mode){
        if(mode=='BackCompat')m='quirks';
        else if(mode=='CSS1Compat')m='Standard';
        else m='Almost Standard';
        alert('The page is rendering in '+m+' mode.');
    }
})();

тот код обнаружит режим для Вас.

IE также бросит в режим причуд, если ЧТО-НИБУДЬ кроме doctype будет на первой строке. Даже пустая первая строка с doctype на второй строке вызовет режим причуд.

1
ответ дан 17 December 2019 в 07:10
поделиться

Библиотека, вероятно, говорит истинное. Проблема не состоит в том, что чтения являются неправильными, но что дисплей acutal является неправильным. Как попытка в качестве примера:

<div id="mydiv" style="width: 100px; border-left: 100px black solid;">&nbsp;</div>

затем попытайтесь изменить текст в отделении для наблюдения то, что происходит. IE отобразит различные значения в зависимости от текста внутри, в то время как FF отобразится правильно. IE пытается заполнить 100 пкс + что-то в 100 пкс пространства с различными результатами.

jQuery имеет два метода для ширины: .width и .outerWidth. .outerWidth возвратят полную ширину элемента. Это также имеет возможность получить все другие свойства (дополнение, граница и т.д.) как в реве в качестве примера:

$(document).ready(function() {
    alert("width=" + $('#mydiv').width() 
    + " outerWidth=" + $('#mydiv').outerWidth() 
    + " borderLeftWidth=" + $('#mydiv').css("borderLeftWidth"))
});
1
ответ дан 17 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: