我有一个枚举(我使用TypeScript编写代码):
export enum AddressType
{
NotSet = 0,
Home = 1,
Work = 2,
Headquarters = 3,
Custom = -1,
}
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中有一个名为type的字段,我在其中设置了应该在select输入中选择的初始值(我将其设置为AddressType.Headquarters).
最后,在我的HTML中我提出以下内容:
<select ng-model="Ctrl.type" ng-options="addressType for addressType in Ctrl.getAddressTypes()"></select>
Run Code Online (Sandbox Code Playgroud)
除了一件事之外,一切似乎都运行正常:由于某种原因,Angular在所有绑定更新后最初都没有在选择中选择"3"(总部).Angular会创建一个额外的选项,而不是:
<option value="?" selected="selected"></option>
Run Code Online (Sandbox Code Playgroud)
因此,由于某种原因,Angular无法确定在组合中选择的初始选项.
如果用户选择组合框的另一个选项,则Ctrl.type会正确更新,因此绑定对该部分的工作正常.基本上我的问题只是最初应该选择的选项未按预期选择.
我在这里错过了什么导致了这个问题?
我有一个contenteditablediv和几段.
这是我的代码:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div id="main" contenteditable="true"
style="border:solid 1px black; width:300px; height:300px">
<div>Hello world!</div>
<div>
<br>
</div>
<div>This is a paragraph</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
假设,我想做一个范围选择,其中包含字符串"world!This is"
怎么做?
有没有办法在W3C兼容的浏览器中获取JavaScript范围对象的html字符串?
例如,假设用户选择以下内容:Hello <b>World</b>
可以使用该Range.toString()方法将"Hello World"作为字符串.(在Firefox中,也可以使用文档的getSelection方法.)
但我似乎无法找到获取内部HTML的方法.
经过一番搜索,我发现范围可以转换为DocumentFragmentObject.
但是DocumentFragments没有innerHTML属性(至少在Firefox中;没有尝试过Webkit或Opera).
这对我来说似乎很奇怪:显然应该有一些方法来访问所选项目.
我意识到我可以创建一个documentFragment,将文档片段附加到另一个元素,然后获取该innerHTML元素.
但该方法将自动关闭我选择的区域内的任何打开的标签.
除此之外,肯定有一个明显的"更好的方法",而不是将它附加到dom只是为了让它成为一个字符串.
那么,如何获取Range或DocFrag的html字符串?
我有两个datagridviews,当我点击其中一个时,我想在第二个datagridview中取消选择所有选择,我试过这个,但没有任何作用:
firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;
Run Code Online (Sandbox Code Playgroud)
不工作,
firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
item.Selected = false;
foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
itemCell.Selected = false;
}
}
Run Code Online (Sandbox Code Playgroud)
不工作,
firstItemsDataGridView.Rows[0,-1].Selected = true;
Run Code Online (Sandbox Code Playgroud)
不工作.
我已经将选择模式设置为全行选择,我不知道如何实现我的目标.
非常感谢!
我花了很长时间才知道Android Spinner.经过几次失败的实施尝试,并且在阅读了许多与我自己的问题部分相似但没有令人满意的答案的问题之后,还有一些没有任何答案,例如这里和这里,我终于得到Android中的"微调器"并不意味着与桌面应用程序中的"下拉列表"或HTML中的选择相同.然而,我的应用程序(我猜测所有其他问题相似的海报的应用程序)需要的东西就像一个下拉框,而不是像一个微调器.
我的两个问题是我最初认为是OnItemSelectedListener的特殊性(我在这个网站上看到这些是单独的问题而不是一个):
现在我意识到,当你想到它时,它在旋转器上发生是有道理的- 它必须从选择的默认值开始,并且你只旋转它来改变那个值,而不是"重新选择"一个value - 文档实际上说:"仅当新选择的位置与先前选择的位置不同时才调用此回调".我已经看到答案表明你设置了一个标志来忽略第一个自动选择 - 我想我可以忍受,如果没有别的办法.
但是,因为我真正想要的是一个下拉列表,它应该作为一个下拉列表(并且用户可以并且应该期待),我需要的是像 Spinner一样的行为就像一个下拉列表,就像一个组合-框.我不关心任何自动预选(这应该在没有触发我的听众的情况下发生),并且我想知道每个选择,即使它与之前的相同(毕竟,用户再次选择相同的项目) .
那么... Android中是否有可以做到这一点的东西,或者某些解决方法使Spinner表现得像下拉列表?如果是这样的一个在这个网站,我还没有发现,并且具有满意的答案的问题,请让我知道(在这种情况下,我真诚地重复的问题道歉).
我一直在努力使用textarea 的selectionStart和selectionEnd属性来使它们与contenteditable div元素一起工作.我已经在谷歌和SO上检查了很多相关文章,但无济于事.我有类似下面的东西,完全适用于textarea.但我希望这个与满足的div一起工作.
function replaceVal(node, val, step){
//...
var cursorLoc = node.selectionStart;
node.value = node.value.substring(0, node.selectionStart - step) + value +
node.value.substring(node.selectionEnd, node.value.length);
node.scrollTop = scrollTop;
node.selectionStart = cursorLoc + value.length - step;
node.selectionEnd = cursorLoc + value.length - step;
//...
}
Run Code Online (Sandbox Code Playgroud)
如何修改它以便它可以使用contenteditable div元素而不是textarea?
当您按contentEditable元素上的Enter键时,每个浏览器都会以不同方式处理生成的代码:Firefox会插入BR标记,Chrome会在Internet Explorer插入P标记时插入DIV标记.
我拼命寻找解决方案,至少为所有浏览器使用BR或P,最常见的答案是:
插入BR标签:
$("#editableElement").on("keypress", function(e){
if (e.which == 13) {
if (window.getSelection) {
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement("br");
range.deleteContents();
range.insertNode(br);
range.setStartAfter(br);
range.setEndAfter(br);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为似乎浏览器不知道如何设置插入符号,<br>这意味着以下操作没有做任何有用的事情(特别是如果在插入符号放在文本末尾时按Enter键):
range.setStartAfter(br);
range.setEndAfter(br);
Run Code Online (Sandbox Code Playgroud)
有些人会说:使用double <br><br>但是当你在文本节点中按Enter键时会产生两个换行符.
其他人会说总是<br>在contentEditable的末尾添加一个额外的,但是如果你有一个<div contenteditable><p>text here</p></div>并且你把光标放在文本的末尾然后点击回车,你将得到错误的行为.
所以我对自己说,也许我们可以使用P而不是BR,常见的答案是:
插入P标签:
document.execCommand('formatBlock', false, 'p');
Run Code Online (Sandbox Code Playgroud)
但这也不能始终如一地发挥作用.
如您所见,所有这些解决方案都有待改进.还有其他解决方案可以解决这个问题吗?
我有一个NSTableView,我想禁用行选择.
表视图的列绑定到a,NSArrayController并且数组的内容确实显示在表视图中.
我怎么能这样做bindings呢?
有没有办法保存更改,例如更改跨越多个标记的HTML文本的背景,以便在再次加载时,所做的更改应反映在HTML页面中.
编辑:详细解释.
加载HTML页面时,使用范围对象和executeCommand选择并突出显示文本:
document.execCommand("BackColor", false, 'yellow');
Run Code Online (Sandbox Code Playgroud)
更改(将文本突出显示为黄色)保留,直到重新加载页面.但是当重新加载页面时,这些更改不存在.我想要的是以某种方式保存这些更改,如在本地数据库sqlite中,以便在重新加载/刷新页面时,应显示HTML页面中的更改.
知道如何做到这一点.我是否需要保存其范围起始偏移和结束偏移,可用于下次加载页面时创建范围.请提供您的见解.
StackOverflow和其他地方有很多声明nth_element是O(n),它通常用Introselect实现:http://en.cppreference.com/w/cpp/algorithm/nth_element
我想知道如何实现这一目标.我查看了维基百科对Introselect的解释,这让我更加困惑.算法如何在QSort和Median-of-Medians之间切换?
我在这里找到了Introsort论文:http://citeseerx.ist.psu.edu/viewdoc/download?doi = 10.1.1.14.5196 &rep = rep1&type = pdf 但是这说:
在本文中,我们将集中讨论排序问题,并在后面的章节中简要回到选择问题.
我试图通过STL本身来了解如何nth_element实现,但这很快就会变得毛茸茸.
有人能告诉我如何实现Introselect的伪代码吗?或者甚至更好,当然除了STL之外的实际C++代码:)